header() 함수는 HTML 파일 상단에 HTTP 헤더 문자열을 전송한다. HTTP 헤더에 대한 자세한 정보는 HTTP 1.1 Specification 를 참조하기 바란다.
헤더와 관련된 두가지 특별한 경우가 있다. 첫번째로 "Location" 헤더에 대한 경우이다. 이것은 지정된 헤더내용을 브라우저에 전송하면서 동시에 아파치 서버로 REDIRECT 코드(REDIRECT status code)를 돌려준다. 스크립트 작성자의 관점으로 볼때 이것은 별로 중요한 내용이 아니지만 아파치 내부동작에 관심이 있는 사람들에겐 알아두어야 할 내용이다.
header ("Location: http://www.php.net"); /* PHP 웹사이트로 리다이렉트한다. */ exit; /* 리다이렉트되고 있을때 아래에 있는 코드가 실행되지 않도록 한다 */ |
두번째는 "HTTP/" 문자열로 시작하는 헤더를 사용하는 경우이다. (대소문자는 상관없음) 예를 들어, 아파치의 ErrorDocument 404 지시자가 여러분의 PHP 스크립트를 가리키게 해두었다면 그 스크립트가 실제로 404 코드를 생성하고 있는지 확실히 해두는 것이 좋다. 아래의 예를 참조하라.
PHP 스크립트를 사용하다보면 클라이언트 브라우저와 프록시서버에 캐쉬되지 말아야할 출력(예: 다이내믹 HTML)을 만들어야 할 경우가 있다. 이럴 경우 아래와 같이 클라이언트와 프록시서버의 캐쉬기능을 강제로 해제할 수 있다.
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header ("Pragma: no-cache"); // HTTP/1.0 |
header() 함수는 HTML의 공백라인이나 PHP가 만들어낸 어떠한 출력보다도 가장 먼저 호출되어야 한다. header() 함수가 호출되기 전에 include() 와 require() 혹은 기타 다른 파일엑세스 관련 함수를 사용하거나 코드내에 공백을 넣는 경우는 스크립트 작성자가 흔히 저지르는 실수이다. 설령 PHP/HTML 파일 하나만 사용한다고 해도 이같은 실수의 가능성은 여전히 존재한다.
<?php require("user_logging.inc") ?> <?php header ("Content-Type: audio/x-pn-realaudio"); ?> // 윗줄에 공백이 있으므로 제대로 동작하지 않을 것이다. |
headers_sent()도 참고하라.