PHP에서 require() 파일 포함 사용법에 대한 자세한 설명

黄舟
풀어 주다: 2023-03-11 11:44:02
원래의
2361명이 탐색했습니다.

전에 일부 PHP 프레임워크의 소스 코드를 볼 때 파일이 포함될 때 dirname(FILE)이 파일 경로를 하나로 묶는 데 사용되는 것이 이상했습니다. 그렇게 하면 장점이 있었는데, 마침내 그 이유를 발견했습니다.

간단한 예를 살펴보겠습니다.

3개의 PHP 파일 a, b, c가 있습니다. a.php는 웹사이트의 루트 디렉터리에 있고, b.php는 b 폴더(b/b.php)에 있으며, c.php는 c 폴더(c/c.php)에 있습니다. 약간의 혼란이 있나요? 그림에서 알 수 있듯이

PHP에서 require() 파일 포함 사용법에 대한 자세한 설명

a.php와 b.php는 모두 c.php를 포함하고 있으며 마지막으로 c.php는 d 폴더에 d/d.php라는 PHP 파일을 포함하고 있습니다.

먼저 a.php를 살펴보겠습니다:

<?php 
    
    $file_name = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    require(&#39;c/c.php&#39;);
    
 ?>
로그인 후 복사

매우 간단한 코드입니다. 인쇄하고 나면 c/c.php가 포함되어 있습니다. 그런 다음 c/c.php를 살펴봐야 합니다.

<?php 
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;../d/d.php&#39;);
 ?>
로그인 후 복사

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 = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    // require(&#39;c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;../d/d.php&#39;);
 ?>
로그인 후 복사

이 시점에서 d/d.php 파일을 포함하려고 할 때 경로가 지금 잘못되었음을 알 수 있습니까? 이제 우리는 a.php 코드에 있으므로 a.php 파일을 기준으로 합니다. 물론 경로는 require('d/d.php')여야 합니다. 맞습니다. 코드를 다음과 같이 수정합니다.

<?php 
    $file_name = &#39;a.php&#39;;
    
    echo "this is a.php";
    echo "<hr>";
    
    // require(&#39;c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;d/d.php&#39;);
 ?>
로그인 후 복사

이 시점에서는 아직 의미를 이해하지 못했습니다. b/b.php를 살펴보겠습니다.

<?php 
    $file_name = &#39;b.php&#39;;
    
    echo "this is b.php";
    echo "<hr>";
        
    require(&#39;../c/c.php&#39;);
 ?>
로그인 후 복사

설명할 필요는 없습니다. 문제는 없습니다. require ('../c/c.php');를 c/c.php의 코드로 바꾸면 문제가 발생합니다. c/c의 코드를 수정했습니다. php를 수정하고 require('../d/d.php');를 require('d/d.php')로 변경했습니다. 아래에 포함된 코드를 살펴보세요.

<?php 
    $file_name = &#39;b.php&#39;;
    
    echo "this is b.php";
    echo "<hr>";
        
    // require(&#39;../c/c.php&#39;);
    $c_file_name = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(&#39;d/d.php&#39;);
 ?>
로그인 후 복사

그래서, 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 = &#39;c.php&#39;;
    
    echo &#39;this is c.php, is required by &#39; . $file_name;
    echo "<hr>";
    
    require(dirname(FILE) . &#39;/../d/d.php&#39;);
 ?>
로그인 후 복사

여기서는 c/c.php만 참조로 사용하면 됩니다. 이에 비해 d/d.php는 다음과 같습니다. 한 레벨 위로 올라갑니다. 이런 식으로 기준은 오직 하나, 즉 내가 이긴다는 것입니다. 당신이 나를 포함하든 그 사람이 나를 포함하든 나는 나 자신만을 기준으로 삼고, 내가 포함시키고 싶은 파일은 나 자신과 관련이 있을 뿐입니다.

dirname(FILE)을 이해하지 못하는 동수들을 위해 구글에 검색해 보세요. 매우 간단합니다.

위 내용은 PHP에서 require() 파일 포함 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!