include dirname(__FILE__).'/../../index.php';
여기서 가장 좋은 방법이며 다른 솔루션에서 발생할 수있는 상대 경로 버그의 대부분을 피할 수 있습니다.
실제로이 코드가 배치 된 현재 스크립트의 위치 (애플리케이션의 아키텍처를 정의하기 때문에 가장 안정적인 위치) 에 항상 상대적으로 포함되도록 강제합니다 . 이것은 include '../../index.php'
실행 ( "호출"이라고도 함) 스크립트에 상대적으로 포함 된 다음 상대적으로 현재 작업 디렉토리 를 포함하는 작업과 다릅니다. 포함 된 스크립트 경로에서 확인하는 대신 스크립트를 포함하는 상위 스크립트를 가리 킵니다. .
PHP 문서에서 :
파일은 주어진 파일 경로 또는 지정된 경로가 없으면 include_path를 기반으로 포함됩니다. include_path에서 파일을 찾을 수 없으면 include는 실패하기 전에 마지막으로 호출 스크립트의 자체 디렉토리와 현재 작업 디렉토리를 확인합니다.
이 트릭을 인용 한 가장 오래된 게시물은 2003 년 Tapken의 게시물 입니다.
다음 설정으로 테스트 할 수 있습니다.
다음과 같은 레이아웃을 만듭니다.
htdocs
¦ parent.php
¦ goal.php
¦
+---sub
¦ included.php
¦ goal.php
에 다음 parent.php
을 입력하십시오.
<?php
include dirname(__FILE__).'/sub/included.php';
?>
에 다음 sub/included.php
을 입력하십시오.
<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>
액세스시 결과 parent.php
:
WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php
보시다시피 첫 번째 경우 경로는 호출하는 스크립트에서 확인되는 parent.php
반면 dirname(__FILE__).'/path'
트릭 을 사용 included.php
하면 코드가 있는 스크립트 에서 포함이 수행 됩니다.
다음은 다른 곳에서 읽을 수있는 것과는 반대로 위의 트릭과 동일하지 않습니다.
include '/../../index.php';
실제로 prepending /
은 작동하지만 include ../../index.php
호출 스크립트 에서처럼 해결 됩니다 (차이점은 include_path
실패 할 경우 나중에 표시되지 않는다는 것입니다). PHP 문서에서 :
경로가 정의 된 경우 (Windows에서 드라이브 문자 또는 \로 시작하거나 Unix / Linux 시스템에서 /로 시작) 또는 현재 디렉토리 (. 또는 ..로 시작)에 상대적인지 여부에 관계없이 include_path가 모두 무시됩니다.