복붙노트

PHP는 파일이나 호출 코드에 상대적인 경로를 포함하고 있습니까?

PHP

PHP는 파일이나 호출 코드에 상대적인 경로를 포함하고 있습니까?

PHP 관련 경로 포함에 관한 규칙 집합을 이해하는 데 문제가 있습니다. A.PHP 파일을 실행하고 A.PHP 파일에 C.PHP 파일이 포함 된 B.PHP 파일이 포함되어 있으면 C.PHP에 대한 상대 경로가 B.PHP 위치 또는 A 위치에 있어야합니다. .PHP? 즉, include 파일이 호출 된 파일 또는 현재 작업 디렉토리가 무엇인지, 그리고 현재 작업 디렉토리를 결정하는 것이 중요합니까?

해결법

  1. ==============================

    1.이 스크립트는 주 스크립트 (이 경우 A.php)와 관련이 있습니다. include ()는 현재 실행중인 스크립트에 코드를 삽입한다는 것을 기억하십시오.

    이 스크립트는 주 스크립트 (이 경우 A.php)와 관련이 있습니다. include ()는 현재 실행중인 스크립트에 코드를 삽입한다는 것을 기억하십시오.

    아니.

    만약 당신이 그것을 중요하게하고, B.php에 대한 include를 포함하고 싶다면, 코드 줄이 위치한 리터럴 현재 파일을 가리키는 __FILE__ 상수 (또는 PHP 5.2 IIRC 이후 __DIR__)를 사용하십시오.

    include(dirname(__FILE__)."/C.PHP");
    
  2. ==============================

    2.@Pekka는 나를 거기에 데려 갔지만, 배운 것을 공유하기를 원합니다.

    @Pekka는 나를 거기에 데려 갔지만, 배운 것을 공유하기를 원합니다.

    getcwd ()는 실행을 시작한 파일이 상주하는 디렉토리를 반환합니다.

    dirname (__ FILE__)은 현재 실행중인 코드가 들어있는 파일의 디렉토리를 반환합니다.

    이 두 함수를 사용하여 필요한 경로와 관련된 경로를 항상 빌드 할 수 있습니다.

    예를 들어, b.php와 c.php가 디렉토리를 공유한다면, b.php는 다음과 같이 c.php를 포함 할 수 있습니다 :

    include(dirname(__FILE__).'/c.php');
    

    b.php가 어디에서 호출되었는지에 관계없이.

    실제로 이것은 상대 경로를 설정하는 선호되는 방법입니다. 추가 코드가 PHP가 include_path를 반복하여 대상 파일을 찾으려고하지 않도록합니다.

    출처 :

    getcwd ()와 dirname (__ FILE__)의 차이점은 무엇입니까? 어느 것을 사용해야합니까?

    dirname (FILE)을 사용해야하는 이유

  3. ==============================

    3.그. 또는 ..은 getcwd ()에 상대적이며, 기본값은 항목 .php 파일의 경로 (예 : A.php)입니다.

    그. 또는 ..은 getcwd ()에 상대적이며, 기본값은 항목 .php 파일의 경로 (예 : A.php)입니다.

    PHP 5.4.3에서 테스트되었습니다 (빌드 날짜 : 2012 년 5 월 8 일 00:47:34).

    (또한 chdir ()은 getcwd ()의 출력을 변경할 수 있습니다.)

  4. ==============================

    4.수락 된 Pekka의 대답은 불완전하며 일반적으로 오해의 소지가 있습니다. 파일이 상대 경로로 제공되면 호출 된 언어 구성 include는 다음과 같은 방식으로 파일을 검색합니다.

    수락 된 Pekka의 대답은 불완전하며 일반적으로 오해의 소지가 있습니다. 파일이 상대 경로로 제공되면 호출 된 언어 구성 include는 다음과 같은 방식으로 파일을 검색합니다.

    먼저 ini_set으로 설정할 수있는 환경 변수 include_path의 경로를 거칩니다. 이것이 실패하면, 호출 스크립트 자신의 디렉토리 인 dirname (__ FILE__) (__DIR__과 php> = 5.3)을 검색합니다. 이것도 실패하면, 그때 만 작업 디렉토리를 검색합니다! 기본적으로 환경 변수 include_path는.으로 시작하는 것으로 밝혀졌습니다. 이것은 현재 작업 디렉토리입니다. 이것이 현재 작업 디렉토리에서 처음으로 검색하는 유일한 이유입니다. http://php.net/manual/en/function.include.php를 참조하십시오.

    따라서 질문의 첫 번째 부분에 대한 정답은 포함 된 호출 스크립트의 위치가 중요하다는 것입니다. 질문의 마지막 부분에 대한 대답은 웹 서버 컨텍스트의 초기 작업 디렉토리가 호출 된 스크립트의 디렉토리이며 PHP가 처리하는 동안 다른 모든 스크립트를 포함하는 스크립트입니다. 커맨드 라인 컨텍스트에서, 초기 작업 디렉토리는 프롬프트에서 php가 호출되었을 때의 것이고 호출 된 스크립트가 위치한 디렉토리 일 필요는 없습니다. 그러나 현재 작업 디렉토리는 PHP 함수 chdir을 사용하여 런타임에 변경할 수 있습니다. http://php.net/manual/en/function.chdir.php를 참조하십시오.

    이 단락은 다른 답변에 대한 의견에 추가됩니다. 일부는 include_path에 의존하는 것이 덜 강력하므로 ./path 또는 __DIR__과 같은 전체 경로를 사용하는 것이 바람직하다고 언급했습니다. /통로. 어떤 사람들은 작업 디렉토리에 의존한다고 말했습니다. 그것이 바뀔 수 있기 때문에 그 자체는 안전하지 않습니다. 그러나 때로는 환경 값에 의존해야합니다. 예를 들어 include_path를 비워두면 호출 스크립트의 디렉토리가 현재 작업 디렉토리보다 먼저 검색 할 첫 번째 디렉토리가됩니다. 코드는 이미 외부 소스에서 정기적으로 작성되고 업데이트 될 수 있으며 코드가 업데이트 될 때마다 접두사 __DIR__를 다시 삽입하지 않으려 고합니다.

  5. ==============================

    5.짧은 대답 : 포함하는 스크립트와 관련이 있습니다.

    짧은 대답 : 포함하는 스크립트와 관련이 있습니다.

    TFM이 올바르게 설명합니다.

    따라서, /app/main.php가 /app/inc.php를 찾을 수있는 include ( "./ inc.php")라고한다면.

    ./은 꼭 필요한 것은 아니지만 include_path에 대한 종속성을 제거합니다.

    누군가 chdir ()을 사용하여 파일을 변경하는 경우 현재 작업 디렉토리에 포함 파일을 찾는 것에 의존하지 않을 것입니다.

  6. ==============================

    6.

    dir
    -> a.php
    -> c.php
    
    - dir2 
    -> b.php
    

    a를 포함 시키려면 ( "../ a.php");

    b를 c에 포함 시키려면 ( "dir2 / b.php");

  7. from https://stackoverflow.com/questions/7378814/are-php-include-paths-relative-to-the-file-or-the-calling-code by cc-by-sa and MIT license