문제 설명
먼저 예제의 디렉토리 구조 와이 세 파일의 내용을 살펴 보겠습니다.
A.php
<? phpinclude './c/d.php'
B.php
<? phpdefine ( '__ b', '이것은 테스트입니다');
C/D.PHP
<? phpinclude '../b.php';var_dump(__b);
C 디렉토리의 d.php 파일은 상단 디렉토리의 B.php 파일을 나타냅니다. C/D.PHP를 별도로 실행할 때는 아무런 문제가 없습니다.
그러나 A.php가 B와 동일한 디렉토리에서 C/D.PHP를 참조하면 문제가 발생합니다.
파일이 존재하지 않는다는 오류가보고됩니다.
생각하다
일반적인 의미는 A.php가 C/D.PHP를 A.PHP에 도입 한 후에도 경로는 include '../b.php' 경로는 A.PHP와 관련이 있으며 A.PHP의 상대 경로는 존재하지 않으므로이 문제가 발생합니다.
파일이 여러 곳에서 참조 될 수 있다면 문제가 발생하기가 매우 쉽고 절대 경로를 사용 하여이 문제를 쉽게 해결할 수 있습니다.
문제를 해결하기 위해 절대 경로를 사용하십시오
파일을 다음으로 변경하면
A.php
<? phpinclude __dir __. '/../b.php'; var_dump (__ b);
B.php
<? phpdefine ( '__ b', '이것은 테스트입니다');
C/D.PHP
<? phpinclude __dir __. '/../b.php'; var_dump (__ b);
이것은 파일의 절대 경로를 참조하도록 변경됩니다. __DIR__ 는 PHP5.3에 존재하는 사전 정의 된 마법 상수로 파일이있는 디렉토리를 나타냅니다. 그런 다음 이것을 사용하여 절대 경로를 작성하는데, A.Php 및 C/D.PHP를 실행할 때 정상적으로 실행할 수 있습니다. Php5.3 이전에 __DIR___ 대신 dirname(__FILE__) 사용하는 경우
요약
위의 모든 것은 PHP의 상대 경로 문제와 절대 경로의 사용에 관한 것입니다. PHP를 사용하는 모든 사람에게 도움이되기를 바랍니다. PHP에서 상대 경로의 구덩이에 다시 들어가지 않기를 바랍니다.