PHP_php 팁에서 require() 파일의 올바른 사용법에 대해 알아야 할 사항

WBOY
풀어 주다: 2016-05-16 20:14:02
원래의
934명이 탐색했습니다.

과거 일부 PHP 프레임워크 소스 코드를 살펴보면 파일이 포함될 때 dirname(__FILE__)을 사용하여 파일 경로를 하나로 묶는 것이 이상했습니다. 그렇게 하면 어떤 이점이 있는지 알 수 없었습니다. , 그러나 마침내 그 이유를 발견했습니다.

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

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를 살펴보겠습니다.

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

이것은 인쇄 후 c/c.php를 포함하는 매우 간단한 코드입니다. 다음으로 c/c.php를 살펴보겠습니다.

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

인쇄 출력 "이것은 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가 다음과 같이 보일 수 있습니다. :

<&#63;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');
 &#63;>
로그인 후 복사

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

<&#63;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');
 &#63;>
로그인 후 복사

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

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

설명할 필요는 없습니다. 문제는 없습니다. 하지만 require('../c/c.php')를 c/c.php의 코드로 바꾸면 문제를 발견할 수 있습니다. 방금 c/c.php의 코드를 수정하고 require('../d/d.php')를 require('d/d.php')로 변경했습니다. 아래 코드에 포함된 내용을 확인하세요.

<&#63;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');
 &#63;>
로그인 후 복사

따라서 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의 필수 경로를 다음으로 변경해야 합니다.

<&#63;php 
  $c_file_name = 'c.php';

  echo 'this is c.php, is required by ' . $file_name;
  echo "<hr>";

  require(dirname(__FILE__) . '/../d/d.php');
 &#63;>
로그인 후 복사

여기서는 c/c.php만 참고하면 되는데 비해 d/d.php는 상위 수준입니다. 이런 식으로 기준은 오직 하나, 즉 내가 이긴다는 것입니다. 당신이 나를 포함하든 그 사람이 나를 포함하든 나는 나 자신만을 기준으로 삼고, 내가 포함시키고 싶은 파일은 나 자신과 관련이 있을 뿐입니다.

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

이상으로 PHP 기술 공유는 종료됩니다. 질문이나 오류가 있으면 메시지를 남겨주세요. 그건 그렇고, 이것은 나의 첫 번째 표준 기술 블로그 게시물입니다. 첫 번째 기사는 수문학이고, 두 번째 기사는 준기술적이며, 오늘 드디어 기술 기사인 Ou Ye를 썼습니다.

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