본문 바로가기

include와 require ?

반응형

일단 include에 대해 알아 볼까요~

include는 말그대로 다른 문서를 현재 문서에 포함시켜 주는것입니다.
예제를 보시죠....

>>> a.php
< ?echo"P";?>

>>> b.php
< ?echo"H";?>

이렇게 두개의 문서가 있습니다.
a.php 에서는 실행하면 P를 찍어 주겠죠..?
p.php 에서는 H를 찍습니다.

그런데 우리는 이 두문서를 이용해서 PHP를 찍어 볼까 합니다...
-_-?오또케?

c.php라는 문서를 만들어 보죠.......아래와 같이...

< ?
include"a.php";
include"b.php";
include"a.php";
?>

실행을 해보면 PHP가 찍힐겁니다....
자......살펴 볼까요..?
include라는것은 include된 문서의 소스를 현재의 문서로 가져옵니다.
그러니까 우리가 만든 c.php의 소스는 아래와 같이 되어버리는거죠..

< ?
echo"P";
echo"H";
echo"P";
?>

그렇죠? include"a.php";에서 a.php의 소스를 가져오기때문에 P를 찍고..
include"b.php";에서는 b.php의 소스를 가져와서..H를 찍습니다.

include의 간단한 예제를 하나 더 볼까요...
보통 라이브러리파일 이라고 해서 사용되는 함수들을 한개의 파일에 모아놓고 함수가 사용되는 문서에서 include해서 함수를 사용합니다.

>>> lib.php
< ?
function TEST() { .... }
?>

위와 같이 lib.php에서 TEST()라는 함수가 선언되었죠...
그럼 test.php에 이렇게 해보죠..

>>> test.php
< ?
include"lib.php";
TEST();
?>

lib.php를 include했기때문에 lib.php의 모든 함수를 사용할수 있게 되었습니다.
그래서 TEST()함수를 호출할수 있는 것이죠...
함수 이외에도 변수도 include하여 사용이 가능하다죠;;;

자 그럼.....더 재미난걸 해볼까요?...

>>> top.php
< table border=1>
< tr><td>

>>> bottom.php
< /td></tr>
< /table>

위 두소스를 볼까요...
top.php에서는 table의 시작입니다...<table>태그가 들어가고...
< tr>로 행을 만들고 <td>로 셀에 내용을 집어 넣을 준비가 된거죠..
그리고 끝입니다.

bottom.php3에서는 </td>로 셀을 닫고 </tr>로 행을 끝낸다음 </table>로 table을 끝냅니다.

이 두소스를 include하는 문서를 만들어 볼까요..

>>> middle.php
< ?
include"top.php";
echo"PHP";
include"bottom.php";
?>

자....볼까요.......
먼저 top.php를 불러와서 테이블을 시작합니다....
그리고 그 테이블 속에 PHP라는 문자를 찍어준다음에...
bottom.php로 테이블을 끝내는것이죠....

쉽죠?-_-

노프레임 문서는 이런형태로 만들어 집니다...
예를 들면 한 문서의 소스에서 메뉴부분만 쏙 뺍니다....
그리고 그 소스를 다른 문서로 만든다음에...
메뉴가 들어가는 부분에 include해주면 끝입니다.
사실 프레임보다 훨씬 편한방법입니다...-_,-

뭐 꼭 노프레임이 아니더라도 배너 같은곳에 쓰시면 편하겠죠...
배너부분만 include해놓으면 나중에 수정하기 편할겁니다.

그런데 주의 할점은 다른경로의 문서를 include할때 입니다.
include는 상대 경로를 써서 해주는게 좋으며....
이미지 태그나 링크등을 주의 해야 하는데..... 예제를 보실까요?~

>>> http://DOMAIN/main/top.php
< img src=image/top.gif>

위 문서는 절대 경로가 http://DOMAIN/main/top.php 입니다.
그리고 문서 내용에 img태그에서는 상대 경로로 image/top.gif 라는 이미지를 띄우는거죠.....그러니까 image라는 폴더에 있는 이미지 입니다.

그럼 이걸 include할 문서를 보죠;;

>>> http://DOMAIN/index.php
< ?include"main/top.php";?>

상대경로로 include했습니다. 이 index.php라는 문서는 경로상으로 root에 위치하고 include될 top.php라는 문서는 main이라는 서브디렉토리에 위치하는 거죠...
그래서 상대경로로 main/top.php라 주었습니다.
그런데 문제는 이렇게 하면 이미지가 안뜬다는거죠......-_-;엇

include가 되면 일단 가져온 소스는 현재 문서로 맞춰집니다.
그래서 <img src=image/top.gif> 라는 소스가 index.php의 소스로 간주 되기 때문에 결국 http://DOMAIN/image 라는 폴더에서 top.gif라는 이미지를 찾는 다는 얘기 입니다. @_@결국 경로가 꼬여 버리는거죠;;

해결 방법은 되도록 같은 경로에서 include하거나....
include될 문서의 모든 태그에서는 절대 경로를 사용합니다.
(이미지 또는 링크...등 주소가 들어가는 모든 태그)

수정된 소스를 보죠;;

>>> http://DOMAIN/main/top.php
< img src=http://DOMAIN/main/image/top.gif>

이렇게 해주면 되겠죠?^^

자 그럼 대충 include에 대해서 감을 잡으셨으리라 생각 됩니다.
그럼 require는 뭔가요?-_-?

require도 include와 같이....다른 파일을 불러와줍니다...
그런데 둘은 다르다지요;;;

가장 큰 차이점은...include는 조건문이나 반복문에서 사용할수 있습니다.
예를 들면...

if(~~~) {include"....";}

위와 같이 if의 조건이 참이면 include하라...라는게 된다는거죠;;;
그러나 require는 조건이 참이든 거짓이든 무조건 가져옵니다. -_-; 무식한넘;;
for문이나 while문에서도 마찬가지 이고요..

그리고 include는 한 문서에서 여러번 사용이 가능 합니다.
그러니까 같은 파일을 여러번 불러 올수가 있다는건데....
require는 한번밖에 불러올수가 없습니다....

-_-이렇게 보니 require가 무지 후져 보이네요;;;
그런데...한가지 require가 좋은점은...
include보다 속도가 빠르다네요;;;^^;

그러니까 위에서 얘기했던 함수라이브러리 파일같은 경우는 어짜피 한번만 불러오면 되는것이니까 속도가 빠른 require를 사용하시는게 좋겠죠~?

(그런데 처음에는 include를 사용하시다가 작업이 완료된후 require를 사용하시는게 좋습니다.
include에서는 에러메세지가 include된 파일을 중심으로 표시되기때문에 그 위치를 찾기 쉽지만 require는 불러들여진 상태로 에러메세지가 표시되기 때문에 에러메세지가 가르키는 위치를 찾기 힘들기 때문입니다)

반응형

'PHP∵SCRIPT' 카테고리의 다른 글

mySQL이란...  (0) 2014.04.06
파일의 입출력 [출력하기]  (0) 2014.04.05
파일의 입출력 [기록하기]  (0) 2014.04.05
파일의 입출력 [퍼미션?]  (0) 2014.04.05
반복실행문  (0) 2014.04.04
비교연산과 조건문...  (0) 2014.04.04
연산하기...  (0) 2014.04.04
변수에 대한 이야기...  (0) 2014.04.04

댓글


Copyright ⓒ SmartWeb All rights reserved.