소개
PHP의 require 문은 include 문과 거의 동일한 방식으로 작동합니다. 하지만 두 문 사이에는 중요한 차이점이 하나 있습니다. 파서가 require로 지정된 파일을 찾지 못하면 치명적인 오류(fatal error)를 발생시켜 현재 스크립트의 실행을 즉시 중단합니다. 반면 include 문은 파일을 찾지 못할 경우 경고(warning)만 출력하고 현재 스크립트의 실행은 계속 진행됩니다.
PHP 파서는 기본적으로 현재 폴더에서 파일을 먼저 찾고, 찾지 못하면 php.ini 설정 파일의 include_path에 지정된 디렉터리를 순차적으로 검색합니다. 이 과정은 include 문과 동일하게 처리됩니다. 만약 요청한 파일이 현재 폴더와 include_path 경로 어디에서도 발견되지 않으면, PHP 파서는 E_COMPILE_ERROR 오류를 발생시키며 호출한 모듈의 실행을 중단시킵니다.
require 문의 그 외 모든 동작 방식은 include 문과 같습니다.
require 사용 예제
다음 예제에서는 메인 PHP 스크립트가 test.php 파일을 불러와 변수를 공유하는 방식을 보여줍니다.
예제
<?php echo "inside main script\n"; $var1=100; echo "now calling test.php script\n"; require "test.php"; echo "returns from test.php"; ?> //test.php <?php $var2=200; //메인 스크립트의 $var1에 접근 echo $var1+$var2 . "\n"; ?>
실행 결과
메인 스크립트를 명령줄에서 실행하면 다음과 같은 결과가 출력됩니다.
inside main script now calling test.php script 300 returns from test.php
require 실패 시 발생하는 오류
다음 예제에서는 존재하지 않는 파일을 불러오려고 시도할 때 어떤 일이 발생하는지 확인할 수 있습니다.
예제
<?php echo "inside main script\n"; $var1=100; echo "now calling nosuchfile.php script\n"; require "nosuchfile.php"; echo "returns from nosuchfile.php"; ?>
실행 결과
다음과 같은 결과가 출력됩니다. 오류가 발생하는 순간 프로그램이 즉시 종료되는 점에 주목하세요.
inside main script now calling nosuchfile.php script PHP Fatal error: require(): Failed opening required 'nosuchfile.php' (include_path='C:\xampp\php\PEAR') in line 5 Fatal error: require(): Failed
정리
require 문은 설정 파일이나 라이브러리처럼 스크립트 실행에 반드시 필요한 파일을 로드할 때 적합합니다. 해당 파일이 없으면 실행을 중단함으로써 잠재적인 오류를 조기에 방지할 수 있기 때문입니다. 반대로 템플릿 조각처럼 없어도 실행에 큰 지장이 없는 파일이라면 include를 사용하는 것이 더 안전한 선택입니다.