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

http://www.webdoor.org/xe/?mid=phpclass_cachelimiter&sort_index=title&order_type=desc&document_srl=1297

 


출처 : http://blog.naver.com/chocolleto?Redirect=Log&logNo=30099672894


+ Recent posts