Network header

(PHP 4, PHP 5, PHP 7, PHP 8)

header — 원시 HTTP 헤더 보내기


설명

header(string $header, bool $replace = true, int $response_code = 0): void

header()는 원시 HTTP 헤더를 보내는 데 사용됩니다. HTTP 헤더에 대한 자세한 내용은 » HTTP/1.1 사양을 참조하세요.

header()는 실제 출력이 전송되기 전에 일반 HTML 태그, 파일의 빈 줄 또는 PHP에서 호출되어야 함을 기억하십시오. include, require, functions 또는 다른 파일 접근 함수로 코드를 읽고 header()가 호출되기 전에 출력되는 공백이나 빈 줄이 있는 것은 매우 일반적인 오류입니다. 단일 PHP/HTML 파일을 사용할 때도 동일한 문제가 존재합니다.

                  
<html>
<?php
/* This will give an error. Note the output
 * above, which is before the header() call */
header('Location: http://www.example.com/');
exit;
?>
                  
                

매개변수

header
헤더 문자열입니다.

두 가지 특수한 경우의 헤더 호출이 있습니다. 첫 번째는 "HTTP/" 문자열로 시작하는 헤더이며(대소문자는 중요하지 않음) 보낼 HTTP 상태 코드를 파악하는 데 사용됩니다. 예를 들어, PHP 스크립트를 사용하여 누락된 파일에 대한 요청을 처리하도록 Apache를 구성한 경우(ErrorDocument 지시문 사용) 스크립트가 적절한 상태 코드를 생성하는지 확인할 수 있습니다.

                      
<?php
// This example illustrates the "HTTP/" special case
// Better alternatives in typical use cases include:
// 1. header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
//    (to override http status messages for clients that are still using HTTP/1.0)
// 2. http_response_code(404); (to use the default message)
header("HTTP/1.1 404 Not Found");
?>
                      
                    

두 번째 특별한 경우는 "Location:" 헤더입니다. 이 헤더를 브라우저로 다시 보낼 뿐만 아니라 201 또는 3xx 상태 코드가 이미 설정되어 있지 않은 한 REDIRECT(302) 상태 코드를 브라우저에 반환합니다.

                      
<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>
                      
                    
replace
선택적 replace 매개변수는 헤더가 이전의 유사한 헤더를 대체해야 하는지 또는 동일한 유형의 두 번째 헤더를 추가해야 하는지 여부를 나타냅니다. 기본적으로 대체되지만 두 번째 인수로 false를 전달하면 동일한 유형의 여러 헤더를 강제 실행할 수 있습니다. 예를 들어:
                      
<?php
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', false);
?>
                      
                    
response_code
HTTP 응답 코드를 지정된 값으로 강제 실행합니다. 이 매개변수는 header가 비어 있지 않은 경우에만 효과가 있습니다.

반환 값

값이 반환되지 않습니다.


오류/예외

<헤더가 전송되도록 예약하지 못한 경우 header()E_WARNING 수준 오류를 발행합니다.


Examples

예제 #1 Download dialog

생성된 PDF 파일과 같이 전송 중인 데이터를 저장하라는 메시지를 사용자에게 표시하려면 » Content-Disposition 헤더를 사용하여 권장 파일 이름을 제공하고 브라우저가 저장 대화상자를 표시하도록 할 수 있습니다.

                  
<?php
// We'll be outputting a PDF
header('Content-Type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>
                  
                

예제 #2 Caching directives

PHP 스크립트는 종종 클라이언트 브라우저나 서버와 클라이언트 브라우저 사이의 프록시 캐시에 의해 캐시되어서는 안 되는 동적 콘텐츠를 생성합니다. 많은 프록시와 클라이언트는 다음을 사용하여 캐싱을 강제로 비활성화할 수 있습니다.

                  
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
                  
                
메모:

위의 모든 헤더를 출력하지 않아도 페이지가 캐시되지 않을 수 있습니다. 사용자가 기본 캐싱 동작을 변경하는 브라우저에 대해 설정할 수 있는 여러 옵션이 있습니다. 위의 헤더를 보내면 스크립트 출력을 캐시할 수 있는 설정을 재정의해야 합니다.

또한 session_cache_limiter()session.cache_limiter 구성 설정을 사용하여 세션을 사용할 때 올바른 캐싱 관련 헤더를 자동으로 생성할 수 있습니다.


메모

메모: 헤더를 지원하는 SAPI가 사용 중일 때만 헤더에 액세스하고 출력할 수 있습니다.

메모: 출력 버퍼링을 사용하여 이 문제를 해결할 수 있습니다. 브라우저에 대한 모든 출력의 오버헤드는 보낼 때까지 서버에서 버퍼링됩니다. 스크립트에서 ob_start()ob_end_flush()를 호출하거나 php.ini 또는 서버 구성 파일에서 output_buffering 구성 지시문을 설정하여 이를 수행할 수 있습니다.

메모: HTTP 상태 헤더 행은 실제 header() 호출이 첫 번째 호출인지 아닌지에 관계없이 항상 클라이언트에 첫 번째로 전송됩니다. HTTP 헤더가 이미 전송되지 않은 한 언제든지 새 상태 줄로 header()를 호출하여 상태를 재정의할 수 있습니다.

메모:

대부분의 최신 클라이언트는 » Location:에 대한 인수로 상대 URI를 허용하지만 일부 이전 클라이언트는 체계, 호스트 이름 및 절대 경로를 포함한 절대 URI가 필요합니다. 일반적으로 $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF']dirname()을 사용하여 상대 URI에서 절대 URI를 직접 만들 수 있습니다.

                    
<?php
/* Redirect to a different page in the current directory that was requested */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>
                    
                  

메모: session.use_trans_sid가 활성화된 경우에도 세션 ID가 Location 헤더와 함께 전달되지 않습니다. SID 상수를 사용하여 수동으로 전달해야 합니다.


기타