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 또는 그 이상의 버전으로 업그레이드하여 이 버그를 해결할 수 있습니다.