>  기사  >  백엔드 개발  >  PHP 헤더 함수 사용 예

PHP 헤더 함수 사용 예

WBOY
WBOY원래의
2016-07-25 08:57:451074검색
  1. Header(“위치: http://bbs.it-home.org”;);
  2. exit; 오류가 발생한 후 실행이 계속되는 것을 방지하려면 각 리디렉션 후에 "exit"를 추가해야 합니다.
  3. ?>
  4. header("refresh:3;url=http://bbs.it-home.org");
  5. print('로드 중입니다. 잠시만 기다려주세요. ...
    3초 후 자동 점프~~~')
  6. 헤더 리디렉션은 사용자의 주소 표시줄에 URL을 입력하는 것과 같습니다
  7. ?> > 코드 복사
예 2, IE에서 페이지 캐싱 비활성화

header('만료: 1997년 7월 26일 월요일 05:00:00 GMT');
  • header(' 마지막 수정: '.gmdate('D, d M Y H:i:s') .' GMT');
  • header('Cache-Control: no-store, no-cache, must-ridate');
  • header('Cache-Control: post-check=0, pre-check=0',false);
  • header('Pragma: no-cache');//http1.0 및 https와 호환
  • ?>
  • 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 Not Found")
    1. 코드 복사
    . 실제로 브라우저에서 반환된 응답은 다음과 같습니다.

    header("http/1.1 404 Not Found");
    1. 코드 복사
    첫 번째 부분은 HTTP 프로토콜의 버전(HTTP 버전)입니다. 두 번째 부분은 상태 코드(Status)입니다. 세 번째 부분은 Reason-Phrase입니다.
    예 4, 사용자가 파일을 다운로드하도록 허용(숨겨진 파일 위치) html 태그를 사용하여 일반 파일을 다운로드할 수 있습니다. 파일을 기밀로 유지하고 싶고 다른 사람에게 파일 링크를 알릴 수 없는 경우 헤더 기능을 사용하여 파일을 다운로드할 수 있습니다.

    header(“콘텐츠 유형: 애플리케이션/x-gzip”);
  • header(“콘텐츠 처리: attachment; filename=filename”);
  • header(“콘텐츠 설명: PHP3 생성 데이터”);
  • ?>
  • 코드 복사
  • 예시 5, 헤더 기능 이전에 내용 입력 일반적으로 HTML 콘텐츠는 헤더 함수 이전에 출력될 수 없습니다. 마찬가지로 setcookie() 및 세션 함수도 출력 스트림에 메시지 헤더 정보를 추가해야 합니다.
    header()가 실행되기 전에 echo와 같은 문이 있는 경우 나중에 header()를 만나면 "경고: 헤더 정보를 수정할 수 없습니다. 헤더는 이미 ...에서 전송되었습니다."라는 오류가 보고됩니다. 이들 함수 앞에는 텍스트, 빈 줄, 캐리지 리턴 등이 있어서는 안 되며, header() 함수 뒤에 exit() 함수를 추가하는 것이 가장 좋습니다.

    예를 들어 다음과 같은 잘못된 쓰기에는 두 개의 PHP 코드 조각 사이에 빈 줄이 있습니다.

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

    원인 분석: PHP 스크립트가 실행되기 시작하면 http 메시지 헤더(제목) 정보와 본문 정보를 동시에 보낼 수 있습니다. 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. // 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 영구 이동됨')//Redirect 새 주소로
    7. header('위치: http://bbs.it-home.org/')
    8. //파일 지연 리디렉션:
    9. header('Refresh: 10; url=http: //bbs.it-home.org/');
    10. print '10초 후에 리디렉션됩니다';
    11. //물론 HTML 구문을 사용하여
    12. // < Meta http-equiv=”refresh” content=”10;http://bbs.it-home.org/ />
    13. // X-Powered-By 재정의: PHP:
    14. header('X- Powered-By : PHP/4.4.0′);
    15. header('X-Powered-By: Brain/0.6b')
    16. //문서 언어
    17. header('Content-언어: en' );
    18. //최근 수정 시간을 브라우저에 알려줍니다.
    19. $time = time() – 60 // 또는 filemtime($fn) 등
    20. header('Last-Modified: '.gmdate( 'D, d M Y H:i:s', $time).' GMT')
    21. //문서 내용이 변경되지 않았음을 브라우저에 알립니다
    22. header('HTTP/1.1 304 Not Modified');
    23. // 콘텐츠 길이 설정
    24. header('Content-Length: 1234′)
    25. //다운로드 유형 설정
    26. header('Content-Type: application/octet-stream'); ;
    27. header( 'Content-Disposition: attachment; filename="example.zip"');
    28. header('Content-Transfer-Encoding: Binary');
    29. // 보낼 파일을 로드합니다.
    30. readfile(' example.zip');
    31. // 현재 문서에 대한 캐싱 비활성화
    32. header('Cache-Control: no-cache, no-store, max-age=0, must-ridate ');
    33. header ('만료: 1997년 7월 26일 월요일 05:00:00 GMT') // 과거 날짜
    34. header('Pragma: no-cache')// 콘텐츠 유형 설정:
    35. header('Content-Type: text/html; charset=iso-8859-1′);
    36. header('Content-Type: text/html; charset=utf-8′);
    37. header('Content -Type: text/plain'); //일반 텍스트 형식
    38. header('Content-Type: image/jpeg') //JPG 이미지
    39. header('Content-Type : application/zip'); // ZIP 파일
    40. header('Content-Type: application/pdf') // PDF 파일
    41. header('Content-Type: audio/mpeg'); file
    42. header(' Content-Type: application/x-shockwave-flash'); //플래시 애니메이션
    43. //로그인 대화 상자 표시
    44. header('HTTP/1.1 401 Unauthorized');
    45. header('WWW-Authenticate : Basic realm="Top Secret"');
    46. print '사용자가 취소 또는 '를 누른 경우 표시될 텍스트;
    47. print '잘못된 로그인 데이터를 입력합니다.';
    48. ?>
    코드 복사
    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.