본문 바로가기
APM

include와 require의 차이점

by 누피짱 2008. 5. 7.
include나 require 구문을 통해 현재의 스크립트에 포함시키려는 파일 또는 문서가 실제로 지정한 경로가 URL상에 존재하지 않을 경우에 대한 결과의 차이임.
 
include : 인자로 지정한 파일이나 문서가 존재하지 않는 다는 경고성 메세지를 출력하고 파싱을 계속 함
require : 치명적인 에러가 발생하였따는 메세지를 출력하고 해당 프로그램의 실행을 중지.
 
 
………………………………………………………………………………………………………………………
 
require
require() 문은 C preprocessor의 #include와 비슷하게, 자신을 지정된 파일로 대체한다.

include() 되거나 require() 되어 읽혀지는 파일은 포함된 파일의 처음에 PHP모드에서 빠져나와 HTML모드로 들어가고, 마지막에 PHP모드로 복귀한다. 따라서 포함될 파일의 PHP 코드는 적절한 PHP 시작, 종료 택에 둘러싸여 있어야 한다.

이것은 require()문을 루프 구조 안에 두어, 매번 다른 파일을 읽어들일 수 없다는 것을 의미한다. 이런 동작을 위해서는 INCLUDE 문을 사용하라.

require('header.inc');
require()는 사실 함수가 아니라 제어구조이다. 따라서 이것은 함수와는 다른 규칙을 따른다. 이를테면 require()는 다른 어떤 제어구조와도 사용할 수 없다. 또한, 이것은 반환값이 없다. (반환값을 돌려받으려하면 파싱 에러가 난다.)

include()와 다르게, require()는 언제나 해당 파일을 읽어온다. 심지어 해당 라인이 전혀 실행되지 않아도 읽어온다. 만약 여러분이 조건에 따라 파일을 포함시키고 싶다면 include()문을 사용하여야 한다. 조건절은 require()에 아무 영향을 미치지 못한다. 그러나, require()문이 있는 줄이 실행되지 않는다면 해당 파일의 어떤 코드도 실행되지 않는다.

비슷하게, 순환문 또한 require()에 영향을 주지 못한다. 해당 파일에 있는 내용이 루프의 내용이라 하더러도 require()문은 단지 한번만 나타나는 것으로 된다.

이것은 require() 문을 순환문 안에 사용할 수 없다는 것을 의미하고, 매 순환시마다 다른 파일을 읽어오려면 include()문을 사용하여야 한다는 것이다.

1
2 require ('header.inc');
3




include()와 require() 모두 호출한 스크립트안으로 원하는 파일의 내용 자체를 끌어들이는(pull) 것이지, HTTP나 그와 비슷한 방식으로 해당 타겟을 call하는 것은 아니다. 따라서 현재 범위안에 선언된 모든 변수들은 포함할 파일 안에서도 그대로 사용된다.


1
2 require ("file.inc?varone=1&vartwo=2"); /* Won't work. */
3
4 $varone = 1;
5 $vartwo = 2;
6 require ("file.inc"); /* $varone and $vartwo will be available in file.inc */
7




여러분은 remote files 기능을 사용하여 HTTP를 통한 원격 파일을 include하거나 require할 때 위의 내용을 명확히 알아둘 필요가 있다.

PHP3에서는 require()로 포함된 파일안에서 return 문을 사용할 수 있었다. 단, return 문이 포함된 파일의 global scope에서 나타나는 경우만 가능하고, 어떠한 블록내({} 내부)에서도 사용할 수 없다. 그러나, PHP4에서는 이런 기능 자체가 없어져 버렸다. 만약 여러분이 이런 기능을 사용하고 싶다면 include() 문을 사용하기 바란다.


황원희님이 번역하신 php manual중에 있는 내용입니다. 

댓글