header 함수
1. 정의
? 개념
- 가공하지 않은 HTTP 헤더를 송신.
- 아무런 처리를 하지 않은(raw) HTTP 헤더를 송신하기 위해 사용.
- HTML 파일의 최상단에서 HTTP 헤더 문자열을 protocol level에서 데이터를 브라우저로 직접 전송할 수 있도록 함.
? 정의
void header(string $string [, bool $replace = true [, int $http_response_code ]] ) |
- string : 송신하는 HTTP status 코드를 표시하거나 브라우저를 리다이렉트할 문자열.
- replace : 이전에 송신된 비슷한 헤더를 바꿀지 또는 같은 형식의 두번째 헤더를 추가할지를 지정.
- http_response_code : HTTP response 코드를 강제적으로 지정.
? 특징
- HTML 태그 및 PHP 와는 상관없이 실제의 출력 이전에 호출되어야 함.
- header() 함수 위에 include() 나 require() 함수를 선언할 수 있는데 읽어 들이는 코드의 결과에 스페이스나 빈 줄이
있으면 에러 발생.
? 파라미터
? string
? HTTP status 코드를 표시
? 특징
- 문자열 “HTTP/”로 시작하는 모든 헤더. (대소문자 구분 없음.)
- 송신하는 HTTP status 코드를 표시하기 위해 사용.
? 예제
<?php header(“HTTP/1.0 404 Not Found”); ?> |
? 브라우저 리다이렉트
? 특징
- “Location:” 헤더.
- 브라우저를 리다이렉트하며, 브라우저에게 REDIRECT (302) status 코드를 돌려줌.
(3xx status 코드가 이미 송신되어 있지 않은 경우만)
? 예제
<?php header(“Location:http://www.naver.com”); // 리다이렉트 후, 이 밑으로는 실행 안됨. exit; ?> |
? replace
? 특징
- 옵션 사항.
- 헤더가 이전에 송신된 비슷한 헤더를 바꿀지 또는 같은 형식의 두 번째 헤더를 추가할지를 지정.
- 디폴트 값은 true.
- false인 경우 같은 타입의 복수 헤더를 강제적으로 생성.
? 예제
<?php header(“WWW-Authenticate: Negotiate”); header(“WWW-Authenticate: NTLM”, false); ?> |
? http_response_code
? 특징
- HTTP response 코드를 강제적으로 지정.
- 리턴하지는 않음.
2. header() 함수를 사용할 때 흔히 발생하는 에러
? header() 이전에 출력 함수 사용
<? echo(“연습삼아\n”); // header() 함수 전에 출력함수를 사용하면 안됨. header(…….); ?> |
? header() 이전에 공백 존재
<? // 이곳에 공백(white space)이 있으면 안됨. header(……); ?> |
// 이곳에 공백(white space)이 있으면 안됨. <? header(……); ?> |
3. 예제
? 강제적으로 캐시 무효화
- PHP 스크립트는 자주 동적으로 HTML을 생성하여야 하는데, 이러한 경우에는 서버와 클라이언트 브라우저 사이에 있는
브라우저 캐시 또는 프록시 캐시에 의해 캐싱되어서는 안됨.
<? header(“Cache-Control: no-cache”); header(“Pragma:no-cache”); ?> |
// 혹은 header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”); // 과거의 날짜 header(“Last-Modified: “ . gmdate(“D, d M Y H:i:s”) . “GMT”); // 항상 변경됨. header(“Cache-Control: no-cache, must-revalidate”); // HTTP/1.1 header(“Pragma: no-cache”); // HTTP/1.0 |
? 다운로드
- 다운로드 다이얼로그 PDF 파일을 생성한 경우 해당 파일을 다운로드할지를 확인하는 대화창을 표시.
- Content-Disposition 헤더를 사용하여 파일명을 지정하면 브라우저에서 대화창을 표시 가능.
<?php // PDF 출력. header(“Content-type : application/pdf”); // downloaded.pdf 라는 이름으로 저장. header(‘Content-Disposition : attachment; filename=”downloaded.pdf”’); // 원래 PDF 소스는 original.pdf readfile(‘original.pdf’); ?> |
? 현재 디렉토리의 다른 페이지로 리다이렉트
<?php $host = $_SERVER[‘HTTP_HOST’]; $uri = rtrim(dirname($_SERVER[‘PHP_SELF’]), ‘/\\’); $extra = ‘mypage.php’;
header(“Location: http://$host$uri/$extra”);
exit; ?> |
? 80번 기본 포트가 아닌 다른 포트로 넘기기
<? if($_SERVER[“SERVER_PORT”] == “80”) // 코드 최상단에 삽입. { header(“Location : http://www.naver.com:8080/”); } … ?> |
? charset을 utf-8로 변경
<?php header(“Content-Type : text/html; charset=UTF-8”); ?> |
4. 참고 자료
- http://breakpoint.tistory.com/141
- http://aine.iegate.net/bbs/board.php?bo_table=plus03&wr_id=264&page=2