개요
PHP에서는 include 문을 사용하여 한 파일에 작성된 코드를 다른 PHP 스크립트에서 재사용할 수 있습니다. 이 기능 덕분에 함수나 클래스를 한 번만 작성해두고 필요한 곳 어디서든 호출할 수 있어, 모듈화된 프로그램 개발이 가능합니다.
include 문은 기본적으로 현재 폴더에서 파일을 먼저 찾고, 찾지 못하면 php.ini 설정 파일의 include_path에 지정된 디렉터리들을 순차적으로 검색합니다. 만약 요청한 파일이 현재 폴더와 include_path 어디에도 존재하지 않으면, PHP 파서는 E_WARNING 경고를 발생시키지만, 호출한 스크립트의 실행은 계속 진행됩니다.
또한 포함된 파일은 include 되기 전에 호출 스크립트에서 정의된 변수들에 접근할 수 있으며, 이러한 변수들은 전역 범위(global scope)를 갖습니다.
include 기본 예제
다음 예제는 메인 PHP 스크립트에서 test.php 파일을 include 하는 방법을 보여줍니다.
예제
<?php echo "inside main script\n"; $var1=100; echo "now calling test.php script\n"; include "test.php"; echo "returns from test.php"; ?> //test.php <?php $var2=200; //메인 스크립트의 $var1에 접근 echo $var1+$var2 . "\n"; ?>
실행 결과
메인 스크립트를 명령줄에서 실행하면 다음과 같은 결과가 출력됩니다.
inside main script<br />now calling test.php script<br /><br />300<br />returns from test.php
메인 스크립트에서 정의한 $var1을 test.php 내부에서 그대로 사용할 수 있는 것을 확인할 수 있습니다.
파일이 없을 때 발생하는 경고
다음 예제처럼 존재하지 않는 파일을 include 하려고 하면 경고(warning)가 발생합니다.
예제
<?php echo "inside main script\n"; $var1=100; echo "now calling nosuchfile.php script\n"; include "nosuchfile.php"; echo "returns from nosuchfile.php"; ?>
실행 결과
실행 결과는 다음과 같습니다. 주목할 점은 경고가 발생해도 프로그램이 종료되지 않고 마지막 문장까지 실행된다는 것입니다.
inside main script now calling nosuchfile.php script PHP Warning: include(nosuchfile.php): failed to open stream: No such file or directory in line 5 PHP Warning: include(): Failed opening 'nosuchfile.php' for inclusion (include_path='C:\xampp\php\PEAR') in line 5 returns from nosuchfile.php
이러한 동작 방식 때문에 include는 실패해도 나머지 페이지를 계속 렌더링해야 하는 상황에 적합합니다. 반면 필수 파일이 누락되면 즉시 중단해야 하는 경우에는 require 문을 사용하는 것이 좋습니다.
함수 내부에서 include 사용하기
다음 예제는 함수 내부에서 test.php를 include 하는 경우입니다. 이때 포함된 파일의 코드는 해당 함수의 일부로 취급됩니다. 따라서 include 파일 안에서 정의된 변수는 함수 외부에서 접근할 수 없습니다.
예제
//main script
<?php
function myfunction(){
$var1=100;
include "test.php";
echo $var1+$var2."\n";
}
myfunction();
echo "variable from included file outside function: $var2";
?>
//test.php included
<?php
echo "test.php called from inside function\n";
$var2=200;
return;
?>실행 결과
메인 스크립트를 명령줄에서 실행하면 다음과 같은 결과가 출력됩니다.
100 test.php called from inside function PHP Notice: Undefined variable: var2 in C:\xampp\php\testscript.php on line 9 Notice: Undefined variable: var2 in C:\xampp\php\testscript.php on line 9 variable from included file outside function
함수 내부에서 선언된 $var2는 지역 변수이므로, 함수 밖에서 접근하려고 하면 "Undefined variable" 알림(Notice)이 발생하는 것을 볼 수 있습니다.
include 파일에서 값 반환하기
include 문은 성공 시 TRUE를, 실패 시 FALSE를 반환합니다. 또한 include 되는 파일에서 return 문으로 명시적으로 표현식을 반환하면, 호출한 스크립트에서 그 값을 받아 추가 처리에 활용할 수 있습니다.
예제
//main script <?php $result=include "test.php"; // 값을 반환함 echo "retun value : $result\n"; $y=include "test1.php"; // return 문만 있음 echo "return value : $y\n"; $x=include "test2.php"; // return 문 없음 echo "return value : $x\n"; ?> //test.php <?php $var=100; return $var; ?> //test1.php <?php $var=100; return; ?> //test2.php <?php $var=100; ?>
실행 결과
실행 결과는 다음과 같습니다.
retun value : 100 return value : return value : 1
결과를 정리하면 다음과 같습니다.
- test.php:
return $var;로 값을 명시적으로 반환했으므로 100이 반환됩니다. - test1.php: 값 없이
return;만 실행했으므로 NULL이 반환됩니다. - test2.php: return 문이 없어 파일 끝까지 실행되었으므로 include 성공을 의미하는 1(TRUE)이 반환됩니다.
이 특성을 활용하면 설정 파일(config.php)에서 배열을 반환받아 사용하는 등, include 문을 함수처럼 활용할 수도 있습니다.