전에 일부 PHP 프레임워크의 소스 코드를 볼 때 파일이 포함될 때 dirname(FILE)이 파일 경로를 하나로 묶는 데 사용되는 것이 이상했습니다. 그렇게 하면 장점이 있었는데, 마침내 그 이유를 발견했습니다.
간단한 예를 살펴보겠습니다.
3개의 PHP 파일 a, b, c가 있습니다. a.php는 웹사이트의 루트 디렉터리에 있고, b.php는 b 폴더(b/b.php)에 있으며, c.php는 c 폴더(c/c.php)에 있습니다. 약간의 혼란이 있나요? 그림에서 알 수 있듯이
a.php와 b.php는 모두 c.php를 포함하고 있으며 마지막으로 c.php는 d 폴더에 d/d.php라는 PHP 파일을 포함하고 있습니다.
먼저 a.php를 살펴보겠습니다:
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; require('c/c.php'); ?>
매우 간단한 코드입니다. 인쇄하고 나면 c/c.php가 포함되어 있습니다. 그런 다음 c/c.php를 살펴봐야 합니다.
<?php $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('../d/d.php'); ?>
Print "이것은 c .php는 a.php에 필요합니다.", $file_name은 a.php에 정의된 변수입니다. 마지막에는 d.php가 포함됩니다. d 폴더는 현재 c.php 파일보다 한 계층 위에 있기 때문에 상식적으로는 자연스럽게 경로를 "../d/d.php"로 작성하게 됩니다. 하지만 안타깝게도 오류가 보고됩니다. 그 이유는 c.php 등 포함된 파일에 다른 파일을 포함시킬 때 경로는 가장 바깥쪽 상위 파일, 즉 a.php를 기준으로 하므로 내가 포함시켰기 때문으로 이해될 수 있다. 응, 그러니까 나한테 의지해야 해. 매우 신비해 보이지만 사실 원리는 매우 간단합니다. require('c/c.php')를 c/c.php 파일의 코드로 생각하면 a.php가 다음과 같이 보일 수 있습니다. :
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; // require('c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('../d/d.php'); ?>
이 시점에서 d/d.php 파일을 포함하려고 할 때 경로가 지금 잘못되었음을 알 수 있습니까? 이제 우리는 a.php 코드에 있으므로 a.php 파일을 기준으로 합니다. 물론 경로는 require('d/d.php')여야 합니다. 맞습니다. 코드를 다음과 같이 수정합니다.
<?php $file_name = 'a.php'; echo "this is a.php"; echo "<hr>"; // require('c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('d/d.php'); ?>
이 시점에서는 아직 의미를 이해하지 못했습니다. b/b.php를 살펴보겠습니다.
<?php $file_name = 'b.php'; echo "this is b.php"; echo "<hr>"; require('../c/c.php'); ?>
설명할 필요는 없습니다. 문제는 없습니다. require ('../c/c.php');를 c/c.php의 코드로 바꾸면 문제가 발생합니다. c/c의 코드를 수정했습니다. php를 수정하고 require('../d/d.php');를 require('d/d.php')로 변경했습니다. 아래에 포함된 코드를 살펴보세요.
<?php $file_name = 'b.php'; echo "this is b.php"; echo "<hr>"; // require('../c/c.php'); $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require('d/d.php'); ?>
그래서, b/b.php와 비교해 보세요. , require('d/d.php'); 경로가 잘못되었습니다. require ('../d/d.php');여야 합니다. 돌아가서 c/c.php의 필수 경로를 수정했는데 잘못된 것입니다. 변경한 후에는 b/b.php는 정상적으로 실행되지만 a/a.php는 c를 공유할 수 없다는 것이 사실입니까? /c?.php, 전신에 영향을 미치는데 어떻게 해야 하나요?
이때 글 서두에서 언급한 dirname(FILE)으로 돌아가면 좋은 일이고 위의 문제를 완전히 해결할 수 있습니다. 이를 사용하면 어떤 파일에 파일이 포함되어 있는지, 어떤 경로에 있는지 걱정할 필요가 없습니다. dirname(FILE)이 해당 파일을 기준으로 경로를 지정할 수 있기 때문입니다. 현재 파일. 즉, c/c.php의 필수 경로를 다음으로 변경해야 합니다.
<?php $c_file_name = 'c.php'; echo 'this is c.php, is required by ' . $file_name; echo "<hr>"; require(dirname(FILE) . '/../d/d.php'); ?>
여기서는 c/c.php만 참조로 사용하면 됩니다. 이에 비해 d/d.php는 다음과 같습니다. 한 레벨 위로 올라갑니다. 이런 식으로 기준은 오직 하나, 즉 내가 이긴다는 것입니다. 당신이 나를 포함하든 그 사람이 나를 포함하든 나는 나 자신만을 기준으로 삼고, 내가 포함시키고 싶은 파일은 나 자신과 관련이 있을 뿐입니다.
dirname(FILE)을 이해하지 못하는 동수들을 위해 구글에 검색해 보세요. 매우 간단합니다.
위 내용은 PHP에서 require() 파일 포함 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!