>  기사  >  백엔드 개발  >  PHP에서 헤더 사용의 확장에 대해 이야기합시다

PHP에서 헤더 사용의 확장에 대해 이야기합시다

伊谢尔伦
伊谢尔伦원래의
2017-06-24 14:28:011141검색

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

예 1:

<?PHP
Header("Location: http://www.php.cn"); 
exit;//在每个重定向之后都必须加上“exit",避免发生错误后,继续执行。
?>

------------- ------------- ----------- ------------- -----
예 2: 시청자가 최신 정보를 얻을 수 있도록 IE
에서 페이지 캐싱을 비활성화합니다. 프록시나 캐시의 정보 대신 항상 정보를 가져옵니다.

<?PHP
header( &#39;Expires: Fri, 4 Dec 2009 09:00:00 GMT&#39; );
header( &#39;Last-Modified: &#39; . gmdate( &#39;D, d M Y H:i:s&#39; ) . &#39; GMT&#39; );
header( &#39;Cache-Control: no-store, no-cache, must-revalidate&#39; );
header( &#39;Cache-Control: post-check=0, pre-check=0&#39;, false );
header( &#39;Pragma: no-cache&#39; ); //兼容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에 대한 특별한 지원을 제공합니다. 클라이언트가 보안 연결을 통해 서버와 통신하고 서버가 응답으로 Pragma:no-cache 헤더를 반환하는 경우 Internet Explorer는 응답을 캐시하지 않습니다.
참고: Pragma:no-cache는 보안 연결에서 사용될 때만 캐싱을 방지합니다. 비보안 페이지에서 사용되는 경우 처리는 Expires:-1과 동일하지만 페이지는 즉시 만료된 것으로 표시됩니다.
http-equiv 메타 태그:
http-equiv 메타는 html 페이지에서 지정된 http 메시지 헤더를 표시하는 데 사용할 수 있습니다. 이전 버전의 IE는 html 메타 태그를 지원하지 않을 수 있으므로 http 메시지 헤더를 사용하여 캐싱을 비활성화하는 것이 가장 좋습니다.
-------------------------------------- ---------------------
예 3: 사용자의 브라우저에 파일이 표시될 수 없다는 메시지를 표시하도록 허용 찾을 수 있습니다.
인터넷의 많은 정보에 따르면 PHP의 header() 함수는 header("Status: 404 Not Found")와 같은
상태 헤더를 브라우저에 보낼 수 있습니다. 그러나 실제로 브라우저에서 반환된 응답은 다음과 같습니다.

HTTP/1.x 200 OK
Date: Thu, 03 Aug 2006 07:49:11 GMT
Server: Apache/2.0.55 (Win32) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Status: 404 Not Found
Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html

일부 정보를 확인한 후 올바른 작성 방법은 다음과 같습니다.

header(”http/1.1 404 Not Found”);

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

<?php
header("Content-type: application/x-gzip"); 
header("Content-Disposition: attachment; filename=文件名/"); 
header("Content-Description: PHP Generated Data"); 
?>

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

//some code here
<?php
//这里应该是一个空行
header(”http/1.1 403 Forbidden”);
exit();
?>

原因是:PHP脚本开始执行 时,它可以同时发送http消息头部(标题)信息和主体信息. http消息头部(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中. 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题).但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header.而后继续发送主体数据.从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。
解决办法:
修改php.ini打开缓存(output_buffering),或者在程序中使用缓存函数ob_start(),ob_end_flush()等。原理是:output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4.0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。
=================================================================
PHP 手册实例应用
1:您可以使用heder命令,强制使浏览器使用新鲜的内容(无缓存) 。
也可以给网址增加了一个唯一的编号,使其每次都读取新的内容,避免缓存。
example:

<?php
print "<img src="cs.jpg" mce_src="cs.jpg">";   //通常读取的是缓存文件
?>
<?
print "<img src="cs.jpg?".time()."" mce_src="cs.jpg?".time()."">";   //增加了唯一的编号,使浏览器重新请求
w//print "<img src="cs.jpg?".rand(100,999)."" mce_src="cs.jpg?".rand(100,999)."">"; 
?>

2: 下面是个很好的函数,将图片传送给浏览器显示。

<?php
function PE_img_by_path($PE_imgpath = "")
{
    if (file_exists($PE_imgpath)) {
        $PE_imgarray = pathinfo($PE_imgpath);
        $iconcontent = file_get_contents($PE_imgpath);
        header("Content-type: image/" . $PE_imgarray["extension"]);
        header(&#39;Content-length: &#39; . strlen($iconcontent));
        echo $iconcontent;
        die(0);
    }
    return false;
} 
?>

위 내용은 PHP에서 헤더 사용의 확장에 대해 이야기합시다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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