source

PHP 프로젝트의 루트 디렉터리 경로 가져오기

bestscript 2022. 11. 2. 22:47

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 기능을 사용합니다.

getcwd()

현재 작업 디렉터리를 가져옵니다.

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_TRANSLATED 2 Apache 1과 값으로 .SCRIPT_FILENAMEApache는 Apache입니다.
되었습니다.PATH_TRANSLATED는 CGI가 존재해야 합니다.PATH_INFO정의되어 있습니다. 2 는 Apache 2를 사용할 수 .AcceptPathInfo = On에 inside inside inside httpd.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);

전에

C:\laragon\www\x\리포트\차트 포함

끝나고

C:\laragon\ww\x\리포트\차트

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