메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

다중 파일 PHP 스크립트

한빛미디어

|

2002-08-05

|

by HANBIT

12,976

저자: 존 코겐셀(John Coggeshall), 역 이호재

항상 필요한 기능은 아니지만 PHP 코드를 몇 개의 파일로 분리해야 편리한 경우가 있다. 스크립트의 분리는 PHP를 쉽게 사용할 수 있게 하고 공용 함수를 재사용할 수 있게 해주기 때문이다.

다행스럽게도 PHP는 다른 파일로부터 PHP 코드를 읽을 수 있는 방법을 4가지나 지원한다. 이 방법에 대해 이제부터 알아보도록 하겠다.

PHP 스크립트로 코드 포함하기

PHP에 코드를 포함하는 방법은 여러 가지가 있다. 시스템 설정에 따라 로컬 시스템의 파일뿐만 아니라 원격 서버의 파일도 포함할 수 있다. 이제부터 PHP에서 이러한 기능을 사용할 수 있는 유용한 방법과 다양한 트릭을 살펴보도록 하자.

PHP에서 코드를 포함시키는 대부분의 작업은 include()를 통해서 할 수 있다. include 문의 문법은 다음과 같다.
include 
PHP 엔진이 include 문을 만나면 PHP 엔진은 즉시 PHP 코드 파싱을 중지하고 지정된 코드를 직접 포함시킨다. 이는 요청된 파일의 코드 종류에 상관없이 이 코드가 include 문을 대체할 것이며 요청된 파일에서 정의된 모든 변수는 요청한 곳에서 동일한 변수 scope를 갖고 사용할 수 있음을 뜻한다. 이 외에도 포함될 PHP 코드는 기존 코드와 같이 안에 있어야 한다.

다음 예를 살펴보자. 아래는 두 개의 서로 다른 파일을 보여준다. 첫번째 파일인 myscript.php는 PHP에 의해 처음에 실행될 파일이다. 두 번째 파일인 included.php는 포함될 PHP 스크립트이다.

myscript.php
";
?>
included.php

"; ?>


(† 역자 주: 오라일리 네트워크 기사 원본 코드에 오류가 있어 수정함)

included.phpmyscript.php와 동일 디렉토리에 있다는 가정 하에 위의 예제를 출력하면 다음과 같다.
The value of the variable is: 0
The value of the variable is: 1
...
The value of the variable is: 9
$testvar is set
included.php에서 $i라는 변수가 어디에도 정의되어 있지 않다는 사실에 주목해라. 그대신 그 변수는 호출하는 스크립트로부터 자동으로 읽어들어져 온다.

참고: 위의 출력에서 $testvar is set는 에러가 아니다. echo에서 큰따옴표대신 작은따옴표를 사용했기 때문에 변수로써 해석이 안되고 그대로 출력이 된다.

Programming PHP
리턴 값

가끔씩 include 스크립트에서 호출한 스크립트로 리턴값을 주어야 할 때가 있다. 이를 위해서는 포함될 파일의 함수 밖에서 리턴문을 사용하면 된다. 아래에서 보는 것처럼 리턴값은 include 문의 결과값이다.

myscript.php
";

$returnval = include "includeanother.inc";

echo "The file includeanother.inc returned a value of "$returnval"
"; ?>
includeme.inc

includeanother.inc
";
?>
위의 코드를 실행한 결과는 다음과 같다.
The file includeme.inc returned a value of "testing"

Hello, world!

The file includeanother.inc returned a value of "1"
만약 include 된 파일이 어떠한 값도 리턴하지 않는 경우 기본적으로 상황에 맞게 true/false를 리턴한다.

파일이 오직 한번만 포함되게 하기

위의 스크립트에서 우리는 똑같은 include 파일을 여러 번 포함시켰다. 그리고 각 경우마다 다른 결과를 보여주었다. 만약 파일이 함수 정의를 포함하고 있다면 이 파일은 단 한 번만 포함되어야 한다. 그렇지 않으면 에러이다. 물론 이를 표준 include문을 통해서도 할 수 있지만 PHP는 include_once라는 함수를 통해 이를 명확하게 실행할 수 있는 수단을 제공한다. include_once 함수는 같은 파일을 여러 번 포함하지 않는다는 사실을 제외하면 include와 완전히 똑같다. include_once는 포함될 파일에 함수 정의가 있거나 여러 번 실행해서는 안될 코드가 있을 경우 유용하게 사용할 수 있다.

파일을 포함할 때 발생하는 에러

includeinclude_once에 대해서 주목해야 할 것 중 하나는 PHP가 에러를 어떻게 처리하느냐와 관련된 것이다. 에러는 파일을 읽어들이는데 발생할 수도 있고, 파일 안에 있는 코드를 수행할 때 발생할 수도 있기 때문이다. include 문이 수행될 때 에러가 발생한다면 PHP는 E_NOTICE라는 종류의 에러를 발생시키고 스크립트를 계속 실행할 것이다. 이 에러가 사용자에게 어떻게 보여지는가는 PHP 설정에 따라 다르다. 포함될 파일이 스크립트 수행에 있어 매우 중요한 파일이라면 아래에 설명한 require 문을 사용해야 할 것이다.

파일이 꼭 포함되게 하기

위에서 알아본 것처럼 includeinclude_once 문 수행시 발생한 에러는 E_NOTICE 에러를 발생시키고 false를 리턴한다. E_NOTICE 에러는 PHP에서 심각하지 않은 에러로 받아들여지기 때문에 원하는 파일이 포함되지 않더라도 스크립트 수행은 계속될 것이다. 만약 포함될 파일의 코드가 꼭 필요한 상황에서는 예상하지 못한 결과를 생성해낼 것이다. 이를 방지하기 위해 PHP는 requirerequire_once라는 파일을 포함하는 함수를 제공한다.

PHP 4.0.2 이전 버전에서는 포함되는 방식과 시점에 있어서 require 문과 쌍벽을 이루는 include 문이 서로 다르게 동작을 하도록 되어 있었다. 그러나 PHP 4.0.2 이후 버전부터 require는 거의 include처럼 동작한다. 유일한 차이점은 에러가 났을 경우 PHP가 취하는 행동이다. requirerequire_once을 수행할 때 에러가 발생했다면 PHP는 E_ERROR라는 치명적인 에러를 발생시키고 전체 스크립트를 멈추게 된다. 이러한 동작은 포함될 파일이 매우 중요한 동작을 하는 경우 기대되는 기능이다. 중요한 변수의 설정이나 호출 스크립트에서 필요한 함수의 정의가 있는 경우 등을 예로 들 수 있다. require_onceinclude_once처럼 파일이 한번만 포함되는 것을 보장한다.

다음 기사 예고

이제 남은 것은 여러분이 실제로 파일을 포함시키는 작업을 하는 것이다! 지금까지 PHP의 중요한 기능 중 하나에 대해 살펴보았다. 다음 기사에서는 PHP에서의 객체지향 프로그래밍에 대해 설명할 것이고 이것이 어떻게 코드 작성시간을 줄이고 재사용성을 높이는지에 대해 알아볼 것이다.
존 코겐셀(John Coggenshall)은 10년간 개발을 해왔으며 PHP로는 5년 정도의 개발 경력을 가진 개인 웹 컨설턴트, 그래픽 디자이너이다.
TAG :
댓글 입력
자료실

최근 본 상품0