PHP 에서 알 아야 할 require()파일 에 포 함 된 올 바른 용법

4670 단어 require파일 포함
예전 에 PHP 프레임 소스 코드 를 봤 을 때 이상 하 게 파일 에 포 함 될 때 dirname(FILE__)파일 경 로 를 맞 추 려 고 했 는데 이렇게 하면 무슨 좋 은 점 이 있 는 지 몰 랐 고 나중에 그 이 유 를 발견 했다.
우 리 는 간단 한 예 를 보 자.
a,b,c 세 개의 phop 파일 이 있 습 니 다.a.php 는 사이트 루트 디 렉 터 리,b.php 는 b 폴 더 아래―b/b.php,c.php 는 c 폴 더 아래―c/c.php.좀 혼 란 스 러 워 요?그림 을 보면 한눈 에 알 수 있다.

a.php 와 b.php 는 모두 c.php 를 포함 하고 마지막 c.php 는 d 폴 더 의 다음 php 파일 인 d/d.php 를 포함한다.
먼저 a.php 를 보 겠 습 니 다.

<?php 
  $file_name = 'a.php';
  echo "this is a.php";
  echo "<hr>";
  require('c/c.php');
 ?>
간단 한 코드 입 니 다.출력 후 c/c.phop 이 포함 되 어 있 습 니 다.이 어 c/c.phop 을 봐 야 합 니 다.

<?php 
  $c_file_name = 'c.php';
  echo 'this is c.php, is required by ' . $file_name;
  echo "<hr>";
  require('../d/d.php');
 ?>
출력 출력"this is c.php,is required by a.php",$filename 은 a.php 에서 정의 하 는 변수 입 니 다.마지막 으로 d.phop 이 포함 되 어 있 습 니 다.d 폴 더 는 현재 c.phop 파일 의 윗 층 에 있 기 때문에 상식 적 으로 경 로 를'../d/d.phop'으로 쓰 는 것 이 당연 합 니 다.하지만 안 타 깝 게 도 잘못 보고 할 수 있 습 니 다.그 이 유 는 포 함 된 파일 에 c.phop 과 같은 다른 파일 을 포함 하 는 것 입 니 다.경 로 는 가장 바깥쪽 의 부모 파일 에 비해 a.phop 에 비해 당신 이 나 에 게 포함 되 었 기 때문에 나 를 기준 으로 해 야 한 다 는 것 으로 이해 할 수 있 습 니 다.보기에 매우 현묘 하고 원 리 는 사실 매우 간단 하 다.너 는 require(c/c.php)를c/c.phop 파일 의 코드 로 보 입 니 다.그러면 우리 의 a.phop 는 이렇게 보일 수 있 습 니 다.

<?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.phop 파일 을 포함 하려 고 할 때 방금 경로 가 잘못 되 었 습 니까?현재 a.phop 코드 에 있 기 때문에 우 리 는 a.phop 파일 에 비해 서 입 니 다.물론 경 로 는 require('d/d.phop')여야 합 니 다.그래 야 지.우 리 는 코드 를 다음 과 같이 수정 합 니 다.

<?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.phop')를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.phop 의 require 경 로 를 수정 하 러 돌아 갑 니 다.그러나 그렇지 않 습 니 다.당신 이 고 친 후에 b/b.phop 은 정상적으로 작 동 할 수 있 습 니 다.그러나 a/a.phop 은 또 안 됩 니 다.그 렇 죠?그들 은 c/c.phop 을 공유 하고 온몸 을 끌 어 당 겨 서 어떻게 합 니까?
이때,우 리 는 문장 첫머리 에 언급 된 dirname(FILE__),이것 은 정말 좋 은 물건 이 니,이상 의 문 제 를 완전히 해결 할 수 있다.그것 을 사용 하면 당신 을 포함 하 는 파일 이 어떤 파일 인지,어떤 경로 아래 에 있 는 지 에 관심 을 가지 지 않 아 도 됩 니 다.부모 파일 이 있 는 등급 을 고려 할 필요 가 없습니다.왜냐하면 dirname(FILE__)현재 파일 에 비해 경 로 를 지정 할 수 있 습 니 다.즉,우 리 는 우리 의 c/c.phop 의 require 경 로 를 다음 과 같이 바 꿔 야 합 니 다.

<?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.phop 을 참조 로 해 야 합 니 다.그것 에 비해 d/d.phop 은 이전 층 에 있 습 니 다.이렇게 해서 하나의 기준 만 있다.그것 은 바로 나 를 기준 으로 네가 나 를 포함 하 든 그 가 나 를 포함 하 든 나 는 나 자신 만 을 기준 으로 하고 내 가 포함 하고 자 하 는 서 류 는 나 자신 에 게 만 있다 는 것 이다.
dirname 에 대하 여(FILE__) 모 르 는 동 수,구 글 주세요.간단 합 니 다.
자,PHP 기술 공 유 는 여기 서 마 치 겠 습 니 다.궁금 하거나 잘못된 점 이 있 으 면 메 시 지 를 남 겨 주세요.하지만 이것 은 나의 첫 번 째 표준 기술 박문 이다.첫 번 째 편 은 수문 이 고 두 번 째 편 은 준 기술 이다.오늘 드디어 기술 의'유럽'을 썼 다.

좋은 웹페이지 즐겨찾기