2009-09-03 3 views
2

나는 경로 상수를 정의하는 init.php 파일을 포함하고 있습니다. 그래서 ... init.php 가 이들 파일에 추가되기 전에 구문 분석 내가 다른 파일에서 다음 파일 (index.php를)과의 init.php 을 포함하는 경우 (레이아웃/header.php)입니다 상위 파일에 추가 된 다음 상위 파일이 전체적으로 구문 분석됩니까?PHP 구문 분석에 포함

EDIT : init.php은 구문 분석 위치와 관련하여 경로 변수를 정의하므로 중요합니다.

답변

3

사실 includerequire는 경고를 발행합니다 E_ERRORinclude 동안 실패합니다 require 제외하고는 모두 동일하다. 또한 두 문은 실제로 스크립트 내에서 실행될 때만 활성화됩니다. 그래서 다음 코드는 항상 작동합니다 : 귀하의 질문에

<?php 
echo "Hello world"; 
if (0) require "non_existing.php"; 

대답은 index.php 먼저 해석되고 실행된다는 것입니다. 그런 다음 include "init.php" 파일이 발생하면 init.php이 파싱되어 현재 범위 내에서 실행됩니다. layout/header.php과 동일 - 먼저 구문 분석됩니다.

으로 이미 init.php 구문 분석 및 include/require 호출 할 때마다 실행됩니다 언급, 당신은 아마 include_once 또는 require_once을 사용하기를 원할 것입니다 때문에.

3

파일이 포함 된 위치에 파일을 복사하여 붙여 넣는 것으로 생각하십시오. 물건을 재정의하지 않으려면 require_once 또는 include_once을 사용하십시오.


.php 또는 .txt 등 사이에는 차이가 없다. .txt 파일에 PHP를 포함 할 수 있으며 <?php openning 태그가있는 한 PHP가 파싱됩니다.

0

include 또는 require을 사용하는 경우에 따라 다릅니다. include을 사용하면 포함 된 파일의 텍스트 내용이 부모에 추가 된 다음 모든 내용이 구문 분석됩니다. require을 사용하면 포함 된 파일을 먼저 파싱하고 해당 내용을 런타임에 사용할 수있게 한 다음 포함 된 파일의 나머지 부분을 구문 분석하여 처리를 계속합니다.

init 파일이 요청의 런타임에만 한 번로드되도록하려면 require_once을 사용하여 호출 횟수에 관계없이 한 번만 구문 분석되도록하십시오. init 파일을 어디서나 상수를로드하려고 시도하는 것이 좋지만, require_once을 사용하면 더 많은 시간을 파싱하지 않도록 할 수 있습니다.

+1

pingw33이 정확합니다. -'require'와'include'는 실패의 심각성에서만 지연됩니다. – Guss

+0

또한 텍스트 포함이 수행되지 않고 모든 PHP 파일이있는 그대로 해석됩니다. – pingw33n

관련 문제