include_once 문이란?
PHP의 include_once 문은 include 문과 마찬가지로 한 파일에 작성된 스크립트를 다른 파일로 가져와 평가하고 실행합니다. 두 문의 차이점은 include_once는 동일한 파일이 이미 한 번 포함되었다면 다시 로드하지 않는다는 점입니다. 이름 그대로, 아무리 여러 번 호출하더라도 해당 파일은 단 한 번만 포함됩니다.
include_once 문은 주로 전역 변수 설정, 라이브러리 활성화 등 애플리케이션 실행 초기에 반드시 수행해야 하는 작업에 사용됩니다.
이 외의 동작 방식은 include 문과 동일합니다.
include_once 기본 예제
다음 예제에서는 Apache 서버의 document root 폴더에 testscript.php가 존재하며, 이 스크립트가 include_once 문을 사용하여 test.php를 포함합니다.
예제 코드
<?php echo "calling include_once statement\n"; $result=include_once "test.php"; ?> //test.php <?php echo "This file is included once\n"; ?>
출력 결과
testscript.php의 URL을 브라우저에서 실행하면 다음과 같은 결과가 출력됩니다.
calling include_once statement This file is included once
파일 포함 실패 시 경고(Warning)
include_once 문의 인자로 지정한 파일을 찾지 못하면 파서가 경고(Warning)를 발생시킵니다. 중요한 점은 경고가 발생해도 프로그램이 종료되지 않고 계속 실행된다는 것입니다.
예제 코드
<?php echo "inside main script<br />"; $var1=100; echo "now calling nosuchfile.php script"; include_once "nosuchfile.php"; echo "returns from nosuchfile.php"; ?>
출력 결과
위 코드를 실행하면 다음과 같은 결과가 나옵니다. 경고가 발생했음에도 프로그램이 중단되지 않는 점에 유의하세요.
inside main script now calling nosuchfile.php script PHP Warning: include_once(nosuchfile.php): failed to open stream: No such file or directory in line 5 PHP Warning: include_once(): Failed opening 'nosuchfile.php' for inclusion (include_path='C:\xampp\php\PEAR') in line 5 returns from nosuchfile.php
include_once 재호출 시 동작
다음 예제에서는 test.php를 include_once 문으로 포함한 후, 같은 파일을 다시 한 번 호출합니다. 이미 포함된 동일한 파일은 두 번째 호출에서 다시 포함되지 않습니다.
예제 코드
//main script <?php echo "inside main script<br>"; echo "now including test.php script<br>"; include_once "test.php"; echo "now including again test.php script<br>"; ?> //test.php included <?php echo "This file is included once"; ?>
출력 결과
브라우저에는 다음과 같은 결과가 표시됩니다.
inside main script now including test.php script This file is included once now including again test.php script
정리 및 참고 사항
include_once는 함수 라이브러나 설정 파일처럼 중복 정의 시 오류(redeclare 오류 등)가 발생할 수 있는 파일을 안전하게 포함할 때 특히 유용합니다. 참고로 PHP에는 성격이 유사한 네 가지 문이 있습니다.
- include: 파일을 포함하며, 실패 시 경고(Warning)만 발생하고 실행은 계속됩니다.
- include_once: include와 동일하지만, 동일 파일의 중복 포함을 방지합니다.
- require: 파일을 포함하며, 실패 시 치명적 오류(Fatal Error)로 실행이 중단됩니다.
- require_once: require와 동일하지만, 동일 파일의 중복 포함을 방지합니다.
따라서 필수적인 파일은 require_once, 선택적인 파일은 include_once를 사용하는 것이 일반적인 모범 사례입니다.