페이지를 새로 만들경우 공통적으로 사용되는 데이터를 또 다시 선언하는 것은 자원의 낭비이죠. 때문에 다른 페이지가 가진 데이터를 가져와 공통적으로 사용할 필요가 있습니다.

이때 아래의 방법으로 다른 페이지의 자원을 불러올 수 있습니다. 이는 소스의 재활용성을 높여주기 때문에 매우 유용하다고 할 수 있으며 php를 비롯한 대부분의 서버단 언어들이 가지고 있는 함수입니다.

include()
include_once()

그리고

require()
require_once()


위 네가지 함수 거의 동일한 역할을 합니다. 외부의 파일을 현재의 파일로 불러오는 것이죠. 그렇다면 위 네가지 함수의 차이점은 무엇일까요?

! include()와 require()의 차이점


; 이 두가지 함수의 차이점부터 알아보겠습니다. include()는 해당하는 파일이 없을 경우 사용자에게 간단한 경고 표시만 하고 페이지는 계속 로딩됩니다. 하지만 require()를 사용할 경우 그 즉시 스크립트를 중단하고 치명적인 에러를 표시하게되죠.

!! _once()에 따른 차이점


; 함수 뒤에 _once가 붙게되면 똑같은 파일은 단 한번만 사용, 즉 나중에 다시 요청하더라도 로딩하지 않습니다. 딱 한번만 쓰이는 것이지요.

사실 일반적인 경우 _once의 사용은 그리 큰 역활이 없습니다. 하지만 라이브러리를 통해 다수의 파일을 연결할 경우에는 혹시 모를 똑같은 리소스를 한번만 불러오도록 미리 방지할 수 있는 매우 유용한 함수입니다.

! 예제를 통해 알아보기


index.php 파일에서 외부파일 add.inc 파일을 불러올 경우 아래처럼 사용할 수 있습니다.


<?php
require_once('/add.inc');
?>


물론 아래처럼 사용해도 무방합니다.


<?php
include_once('/add.inc');
?>


참고로, 위 함수에서 파일을 불러올때 절대경로 또는 상대경로에 대해 유념할 필요가 있죠. 예를 들면 자바스크립트처럼 슬러쉬나 구둣점 기호(.)를 사용해서 원하는 경로를 원하는 방식대로 표현가능하지만 위 함수에서 상대 경로로 불러올 경우 구둣점 기호가 없어야 합니다. 아래 예제처럼요...


<?php
include_once('Apath/add.inc');
// 경로 Apath 안에 있는 파일인 경우
?>


또 하나... 파일을 불러올 경우 확장자가 구분되지는 않습니다. 하지만 php가 아닌 경우(예를 들어 inc나 txt 등등..) 텍스트 형태로 노출될 수 있기 때문에 암호를 비롯한 중요한 데이터가 있는 경우 접근을 차단하거나 가급적 이런 데이터는 php를 유지하는 것이 좋습니다.