PHP header() 함수

정의와 사용법

header() 함수는 클라이언트에게 원시 HTTP 헤더를 전송합니다.

중요한 점을 인식해야 합니다. header() 함수를 호출하려면 실제 출력이 전송되기 전에 호출해야 합니다. (PHP 4 이상에서는 출력 캐시를 사용하여 이 문제를 해결할 수 있습니다):

<html>
<?php
// 결과 오류
// header() 호출 전에 이미 출력이 존재합니다
header('Location: http://www.example.com/');
?>

문법

header(string,replace,http_response_code)
파라미터 설명
string 必需입니다. 전송할 헤더 문자열을 정의합니다.
replace

선택 사항입니다. 이 헤더가 이전 헤더를 대체할지 여부를 지시합니다.

기본적으로 true(대체)입니다. false(동일한 타입의 여러 헤더 허용)

http_response_code 선택 사항. HTTP 응답 코드를 지정된 값으로 강제합니다. (PHP 4 이상 버전에서 사용 가능)

알림 및 주석

주석:PHP 4.4 이후로, 이 함수는 한 번에 여러 헤더를 보내는 것을 방지합니다. 이는 헤더注入 공격을 방어하는 조치입니다.

예제

예제 1

<?php
// 과거의 날짜
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");

?>
<html>
<body>
...
...

주석:사용자는 브라우저의 기본 캐시 설정을 변경하기 위해 일부 옵션을 설정할 수 있습니다. 위의 헤더를 보내면, 이러한 설정을 모두 대체하고, 브라우저가 캐시하지 않도록 강제할 수 있습니다!

예제 2

사용자에게 생성된 PDF 파일을 저장하도록 알립니다(Content-Disposition 헤더는 추천 파일명을 제공하고, 브라우저가 저장 대화 상자를 표시하도록 강제합니다):

<?php
header("Content-type:application/pdf");
// 파일은 downloaded.pdf로 불릴 것입니다
header("Content-Disposition:attachment;filename='downloaded.pdf'");
// PDF 소스는 original.pdf에 있습니다
readfile("original.pdf");
?>
<html>
<body>
...
...

주석:Microsoft IE 5.5는 이 메커니즘을 차단하는 버그가 있습니다. Service Pack 2 또는 그 이상의 버전으로 업그레이드하여 이 버그를 해결할 수 있습니다.