PHP 프로젝트의 루트 디렉터리 경로 가져오기
제 PHP 프로젝트에는 이 폴더 구조가 있습니다.(이것은 일식과 같다)
-MySystem
+Code
+Data_Access
-Public_HTML
+css
+js
+Templates
-resources
이 코드를 시도하면
echo $_SERVER['DOCUMENT_ROOT']
출력은
D:/워크스페이스
에의 하려면 어떻게 해야 합니까(「 Directory」).MySystem더명명 ?드 ?? ????
PHP > = 5.3.0의 경우 시도합니다.
PHP 매직 상수입니다.
__DIR__
그리고 너의 길을 상대적으로 만들어라.
PHP < 5 . 3 . 0 의 경우는, 시험해 주세요.
dirname(__FILE__)
그렇게 말하면
$_SERVER['DOCUMENT_ROOT']
에는 다음 경로가 포함되어 있습니다.
D:/workspace
★★★★★★★★★★★★★★★.D:신이이 찾고 ?? ???하여 문자열을 첫 문자열을 할 수 있습니다.
$pathInPieces = explode('/', $_SERVER['DOCUMENT_ROOT']);
echo $pathInPieces[0];
서버의 루트 디렉토리를 출력합니다.
업데이트: 상수를 사용하는 경우DIRECTORY_SEPARATOR슬래시 '/'이 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」
업데이트 2:$_SERVER글로벌 변수를 항상 사용할 수 있는 것은 아닙니다.예를 들어 명령줄(cli)에 있습니다. 때문에 이렇게 써야 요.__DIR__$_SERVER['DOCUMENT_ROOT']__DIR__php php php php php php php php php php php php 。
PHP 기능을 사용합니다.
현재 작업 디렉터리를 가져옵니다.
Wordpress가 이것을 처리하는 방법을 지적하고 싶다.
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
Wordpress는 웹 전체에서 매우 무겁고 로컬에서도 잘 작동하기 때문에 저는 이 방법을 매우 신뢰하고 있습니다.는 단어 누르기 .wp-config.php
현시점에서는, PHP 자체는 프로젝트의 루트 디렉토리를 확실히 취득할 수 있는 방법을 제공하고 있지 않습니다.
다만, 매우 심플한 방법을 실장할 수 있기 때문에, 자신이 원하는 대로 실행할 수 있습니다.
솔루션
을 만듭니다(예: 새 파일을 만듭니다).D:/workspace/MySystem/Code/FilesManager.php(이름과 경로가 자신에게 가장 적합한 것을 사용하세요.그런 다음 다음 코드를 사용합니다.
<?php
class FilesManager
{
public static function rootDirectory()
{
// Change the second parameter to suit your needs
return dirname(__FILE__, 2);
}
}
그럼 이제 이렇게 돼요, 하면 안 돼요.D:/workspace/MySystem/Code/a/b/c/Feature.php:
echo FilesManager::rootDirectory();
예상되는 결과는 다음과 같습니다.
"D:/workspace/MySystem"
프로젝트 내 "기능" 파일의 위치에 관계없이 출력은 동일합니다.
설명.
dirname은 첫 번째 파라미터의 부모 디렉토리를 반환하기 위해 사용됩니다.우리는 마법의 상수를 사용한다. __FILE__FilesManager.php의 경로입니다.두 번째 매개 변수는 계층에서 위로 올라가는 횟수를 나타냅니다.이 경우 두 번 수행해야 하지만 계층 내 어디에 파일을 배치하느냐에 따라 다릅니다.두 번째 파라미터는 1회만 실행할 필요가 있는 경우 생략할 수 있습니다.즉, 파일은 루트에 있습니다.,할 수 .__DIR__대신 직접.
이 솔루션은 서버의 루트가 어디에 있든 반드시 동작합니다.계층 내의 다른 곳으로 유틸리티 클래스를 이동하지 않는 한.
추가 메모
다음과 같은 이유로 DOCUMENT_ROOT를 사용하지 않습니다(이 답변에 따라).
- 애플리케이션을 서버에 의존시킵니다.
- Apache 설치에서 루트 디렉터리에 잘못된 경로를 제공할 수 있습니다.
한번 해보시면 됩니다.$_SERVER['PATH_TRANSLATED']
견적:
서버에서 가상에서 실제로의 매핑을 수행한 후 현재 스크립트에 대한 파일 시스템 기반 경로(루트 기반 아님).4.3 of : PHP 4.3.2 재, 、
PATH_TRANSLATED2 Apache 1과 값으로 .SCRIPT_FILENAMEApache는 Apache입니다.
되었습니다.PATH_TRANSLATED는 CGI가 존재해야 합니다.PATH_INFO정의되어 있습니다. 2 는 Apache 2를 사용할 수 .AcceptPathInfo = On에 inside inside insidehttpd.confPATH_INFO
출처 : php.net/manual
echo $pathInPieces = explode(DIRECTORY_SEPARATOR , __FILE__);
echo $pathInPieces[0].DIRECTORY_SEPARATOR;
리얼 패스를 사용할 수도 있습니다.
realpath(".")문서 루트를 반환합니다.
특정 경로를 사용하여 realpath를 호출할 수 있습니다.대상 폴더 또는 파일이 존재하지 않으면 작동하지 않습니다.이 경우 false가 반환되므로 파일이 존재하는지 테스트하는 데 유용할 수 있습니다.
제 경우 디스크에 쓸 새 파일의 경로를 지정해야 했습니다. 해결책은 문서 루트에 상대적인 경로를 추가하는 것이었습니다.
$filepath = realpath(".") . "/path/to/newfile.txt";
이게 도움이 됐으면 좋겠어요.
dirname(__FILE__)
도움이 되지만 현재 파일 URL에 상대적인 경로를 얻을 수 있습니다.이는 root에서 멀리 떨어져 있는 경우입니다.또한 root에서 폴더를 취득해야 하기 때문입니다.integer 파라미터 2를 사용할 수 있는 경우 integer parameter 2는 1레벨 위로 올라갑니다.
echo dirname(__FILE__, 2);
전에
끝나고
reports는 루트 디렉토리 x 내의 폴더입니다.
요약
이 예에서는 아파치 루트 폴더가 '/var/www/'인 위치를 항상 알고 있으며 다음 폴더 경로(예: '/var/www/my_website_folder')를 찾고 있다고 가정합니다.또한 스크립트 또는 웹 브라우저에서 동작하기 때문에 추가 코드가 있습니다.
코드 PHP7
function getHtmlRootFolder(string $root = '/var/www/') {
// -- try to use DOCUMENT_ROOT first --
$ret = str_replace(' ', '', $_SERVER['DOCUMENT_ROOT']);
$ret = rtrim($ret, '/') . '/';
// -- if doesn't contain root path, find using this file's loc. path --
if (!preg_match("#".$root."#", $ret)) {
$root = rtrim($root, '/') . '/';
$root_arr = explode("/", $root);
$pwd_arr = explode("/", getcwd());
$ret = $root . $pwd_arr[count($root_arr) - 1];
}
return (preg_match("#".$root."#", $ret)) ? rtrim($ret, '/') . '/' : null;
}
예
echo getHtmlRootFolder();
출력:
/var/www/somedir/
세부사항:
기본적으로 '/var/www/'가 포함된 경우 먼저 DOCUMENT_ROOT를 가져오고, 그렇지 않으면 현재 dir(프로젝트 내부에 많이 있음)를 가져오고 $root 경로의 수에 따라 다음 경로 값을 가져옵니다.참고: 모든 경우에 '/'로 끝나는 경로를 반환할 수 있도록 rtrim 문을 추가했습니다./var/www/보다 클 필요가 있는지 체크하지 않고 /var/www/를 응답으로 반환할 수도 있습니다.
이건 나한테 효과가 있었어
realpath("../")
이것을 사용할 수 있다../param to point.실제 작업 파일을 1단계 뒤로 포인트 합니다.
언급URL : https://stackoverflow.com/questions/8668776/get-root-directory-path-of-a-php-project
'source' 카테고리의 다른 글
| 특징과 인터페이스 (0) | 2022.11.12 |
|---|---|
| 레퍼런스:MySQL 확장자를 사용하는 완벽한 코드 샘플은 무엇입니까? (0) | 2022.11.02 |
| 브라우저가 두 번 새로 고쳐질 때까지 NodeJS 스크립트가 응답하지 않음 (0) | 2022.11.02 |
| Asyncio.gather와 Asyncio.잠깐만요. (0) | 2022.11.02 |
| MySql Processlist가 "절전" 항목으로 채워져 "너무 많은 연결"이 발생합니까? (0) | 2022.11.02 |