>  기사  >  백엔드 개발  >  PHP의 헤더 함수 사용 예에 ​​대한 자세한 설명

PHP의 헤더 함수 사용 예에 ​​대한 자세한 설명

WBOY
WBOY원래의
2016-07-25 08:59:04897검색
  1. Header("위치: http://bbs.it-home.org";);
  2. exit;//in 오류가 발생한 후 실행이 계속되는 것을 방지하려면 각 리디렉션 후에 "exit"를 추가해야 합니다.
  3. ?>
코드 복사

2,

  1. header("refresh:2;url=http://bbs.it-home.org");
  2. echo "로드 중입니다. 잠시 기다려 주십시오...
    자동으로...";
  3. ?>
코드 복사

예 2:IE에서 페이지 캐싱 비활성화 시청자가 프록시나 캐시의 데이터 대신 항상 최신 콘텐츠를 얻을 수 있도록:

  1. header( '만료: 2009년 12월 4일 금요일 09:00:00 GMT' );
  2. header( ' 마지막 수정: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
  3. header( 'Cache-Control: no-store, no-cache, must-revalidate' );
  4. header( 'Cache-Control: post-check=0, pre-check=0', false );
  5. header( 'Pragma: no-cache' ) //http1.0 및 https와 호환 가능
  6. ?>
코드 복사

CacheControl = no-cache Pragma=no-cache Expires = -1 서버의 웹 페이지가 자주 변경되는 경우 Expires를 -1로 설정하여 즉시 만료되도록 합니다. 웹페이지가 매일 오전 1시에 업데이트된다면 만료일을 다음 날 오전 1시로 설정할 수 있습니다. HTTP1.1 서버가 CacheControl = no-cache를 지정하면 브라우저는 웹 페이지를 캐시하지 않습니다.

기존 HTTP 1.0 서버는 Cache-Control 헤더를 사용할 수 없습니다. 따라서 HTTP 1.0 서버와의 하위 호환성을 위해 IE는 Pragma:no-cache 헤더를 사용하여 HTTP에 대한 특별한 지원을 제공합니다. 클라이언트가 보안 연결(https://)을 통해 서버와 통신하고 서버가 응답으로 Pragma:no-cache 헤더를 반환하는 경우 Internet Explorer는 응답을 캐시하지 않습니다. 참고: Pragma:no-cache는 보안 연결에서 사용될 때만 캐싱을 방지합니다. 비보안 페이지에서 사용되는 경우 처리는 Expires:-1과 동일하지만 페이지는 즉시 만료된 것으로 표시됩니다.

http-equiv 메타 태그: http-equiv 메타를 사용하여 HTML 페이지에서 지정된 http 메시지 헤더를 표시할 수 있습니다. 이전 버전의 IE는 html 메타 태그를 지원하지 않을 수 있으므로 http 메시지 헤더를 사용하여 캐싱을 비활성화하는 것이 가장 좋습니다.

예 3: 사용자의 브라우저에 파일을 찾을 수 없다는 메시지가 표시되도록 합니다. 인터넷의 많은 정보에 따르면 PHP의 header() 함수는 Status 헤더를 브라우저에 보낼 수 있습니다. 헤더("상태: 404 찾을 수 없음")와 같은 것입니다. 그러나 브라우저에서 반환된 실제 응답은 다음과 같습니다.

  1. header("http/1.1 404 Not Found");
코드 복사

첫 번째 부분은 HTTP 프로토콜 버전(HTTP-Version)이고, 두 번째 부분은 상태 코드(Status)이고, 세 번째 부분은 이유 문구(Reason-Phrase)입니다.

예 4: 사용자가 파일을 다운로드하도록 허용(숨겨진 파일 위치) html 태그를 사용하여 일반 파일을 다운로드할 수 있습니다. 파일을 기밀로 유지하고 싶고 다른 사람에게 파일 링크를 알릴 수 없는 경우 헤더 기능을 사용하여 파일을 다운로드할 수 있습니다.

  1. header("콘텐츠 유형: 애플리케이션/x-gzip");
  2. header("콘텐츠 처리: attachment; filename=filename/");
  3. header("콘텐츠 설명: PHP3 생성 데이터");
  4. ?>
코드 복사

예시 4: 헤더 기능 전 내용 입력 일반적으로 HTML 콘텐츠는 헤더 함수 이전에 출력될 수 없습니다. 마찬가지로 setcookie() 및 세션 함수도 출력 스트림에 메시지 헤더 정보를 추가해야 합니다. header()가 실행되기 전에 echo와 같은 문이 있는 경우 나중에 header()를 만나면 "경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 ....에서 전송되었습니다."라는 오류가 보고됩니다. 즉, 이들 함수 앞에는 텍스트, 빈 줄, 캐리지 리턴 등이 있어서는 안 되며, header() 함수 뒤에 exit() 함수를 추가하는 것이 가장 좋습니다. 예를 들어 다음과 같이 잘못 작성하면 두 PHP 코드 조각 사이에 빈 줄이 있습니다.

  1. //여기에 코드가 있습니다
  2. ?>
  3. //이것은 빈 줄이어야 합니다
  4. 헤더("http/1.1 403 금지됨");
  5. exit();
코드 복사

?>

이유는 PHP 스크립트가 실행을 시작할 때 http 메시지 헤더(제목) 정보와 본문 정보를 동시에 보낼 수 있기 때문입니다(header() 또는 SetCookie() 함수에서). 즉시 전송되지는 않지만 목록에 저장됩니다. 이를 통해 기본 헤더(예: Content-Type 헤더)를 포함한 헤더 정보를 수정할 수 있습니다. (예를 들어, HTML 또는 print()를 사용하면 PHP는 먼저 모든 헤더를 보낸 다음 HTTP 헤더를 종료해야 합니다. 그런 다음 계속해서 본문 데이터를 보냅니다. 이 시점부터 헤더 정보를 추가하거나 수정하려는 모든 시도는 다음과 같습니다. 허용되지 않으며 위에서 언급한 오류 메시지 중 하나입니다.

해결책: php.ini를 수정하여 캐싱(output_buffering)을 활성화하거나 프로그램에서 캐싱 함수 ob_start(), ob_end_flush() 등을 사용하세요. 원칙은 다음과 같습니다. output_buffering이 활성화되면 스크립트가 출력을 보낼 때 PHP는 HTTP 헤더를 보내지 않습니다. 대신, 이 출력을 동적으로 증가하는 캐시로 연결합니다(중앙 집중식 출력 메커니즘이 있는 PHP 4.0에서만 사용 가능). 헤더는 실제로 전송되지 않으므로 헤더를 수정/추가하거나 쿠키를 설정할 수 있습니다. 모든 스크립트가 종료되면 PHP는 자동으로 HTTP 헤더를 브라우저에 보낸 다음 출력 버퍼의 내용을 보냅니다.

PHP 매뉴얼에 헤더 함수의 몇 가지 작은 예를 소개합니다.

1. 브라우저가 새로운 콘텐츠(캐시 없음)를 사용하도록 하려면 heder 명령을 사용하세요. URL에 고유 번호가 추가되어 매번 새로운 콘텐츠를 읽고 캐싱을 방지합니다.

  1. 인쇄 "" //일반적으로; 캐시 파일을 읽습니다
  2. ?>
  3. print ""; //브라우저가 다시 요청하도록 하는 고유 번호를 추가했습니다
  4. //인쇄 "";
  5. ?>
코드를 복사

2하고 이미지 표시를 위해 브라우저로 전송됩니다.

  1. 함수 PE_img_by_path($PE_imgpath = "")
  2. {
  3. if (file_exists($PE_imgpath)) {
  4. $PE_imgarray = pathinfo($PE_imgpath);
  5. $iconcontent = file_get_contents($PE_imgpath);
  6. header("콘텐츠 유형: 이미지/" . $PE_imgarray["extension"]);
  7. header('Content-length: ' . strlen($iconcontent));
  8. echo $iconcontent;
  9. die(0);
  10. }
  11. return false;
  12. }
  13. ?> ;
코드 복사

첨부된 헤더 기능의 완전하고 포괄적인 적용 예입니다.

  1. // ok
  2. header('HTTP/1.1 200 OK');
  3. //404로 설정 Header:
  4. header('HTTP/1.1 404 Not Found');
  5. //영구적으로 리디렉션되도록 주소를 설정
  6. header('HTTP/1.1 301 Permanently Moved');
  7. //Redirect 새 주소로
  8. header('위치: http://www.baidu.com');
  9. //파일 지연 리디렉션:
  10. header('새로 고침: 10; url=http://www .example.org/');
  11. print '10초 후에 리디렉션됩니다';
  12. //물론 html 구문을 사용하여 구현할 수도 있습니다
  13. //
  14. header('Content-Transfer-Encoding: Binary');
  15. // 보낼 파일 로드:
  16. readfile('example. zip');
  17. // 현재 문서에 대한 캐싱 비활성화
  18. header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
  19. header( '만료: 1997년 7월 26일 월요일 05:00:00 GMT'); // 과거 날짜
  20. header('Pragma: no-cache');
  21. //콘텐츠 유형 설정:
  22. header ('Content-Type: text/html; charset=iso-8859-1');
  23. header('Content-Type: text/html; charset=utf-8');
  24. header('Content- 유형: text/plain' ); //일반 텍스트 형식
  25. header('Content-Type: image/jpeg'); //JPG 이미지
  26. header('Content-Type: application/zip') / / ZIP 파일
  27. header('Content-Type: application/pdf'); // PDF 파일
  28. header('Content-Type: audio/mpeg') // 오디오 파일
  29. header('Content -유형: application/x -shockwave-flash'); //플래시 애니메이션
  30. //로그인 대화 상자 표시
  31. header('HTTP/1.1 401 Unauthorized');
  32. header('WWW-인증: Basic realm="Top Secret "');
  33. print '사용자가 취소 또는 ';
  34. print '잘못된 로그인 데이터 입력'을 누를 경우 표시될 텍스트';
  35. ?>
코드 복사


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.