`
xubindehao
  • 浏览: 238227 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

php header函数的详细解析 转

阅读更多

header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端。标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔。有关 HTTP 的详细说明,可以参 RFC 2068 官方文件 (http://www.w3.org/Protocols/rfc2068/rfc2068)。在 PHP 中送回 HTML 资料前,需先 传完所有的标头。 使用范例 范例一: 本例使浏览器重定向到 PHP 的官方网站。

<!--P Header("Location: http://www.php.net";); exit; //在每个重定向之后都必须加上&ldquo;exit",避免发生错误后,继续执行。 --><!--p /** @title:PHP定时跳转 @功能:等待指定的时间,然后再跳转到指定页面(代替html meta方式) */ header("refresh:3;url=http://axgle.za.net"); print('正在加载,请稍等...<-->

三秒后自动跳转~~~'); /* 补充说明:若等待时间为0,则与header("location:")等效。 */ header重定向 就等价于替用户在地址栏输入url ?> 范例二:禁止页面在IE中缓存 要使用者每次都能得到最新的资料,而不是 Proxy 或 cache 中的资料,可以使用下列的标头

<!--P 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-store, no-cache, must-revalidate' ); 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点更新,可以把Expires设置为第二天的凌晨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 meta标记: 在html页面中可以用http-equiv meta来标记指定的http消息头部。老版本的IE可能不支持html meta标记,所以最好使用http消息头部来禁用缓存。 范例三: 让使用者的浏览器出现找不到档案的信息。 网上很多资料这样写:php的函数header()可以向浏览器发送Status标头,如 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-Version);第二部分为状态代码(Status);第三部分为原因短语(Reason-Phrase)。 范例四:让使用者下载档案( 隐藏文件的位置 ) html标签 就可以实现普通文件下载。如果为了保密文件,就不能把文件链接告诉别人,可以用header函数实现文件下载。

<!--p header("Content-type: application/x-gzip"); header("Content-Disposition: attachment; filename=文件名\"); header("Content-Description: PHP3 Generated Data"); -->

范例四:header函数前输入内容 一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些函数需要在输出流中增加消息头部信息。如果在header()执行之前有echo等语句,当后面遇到header()时,就会报出 “Warning: Cannot modify header information - headers already sent by ….”错误。就是说在这些函数的前面不能有任何文字、空行、回车等,而且最好在header()函数后加上exit()函数。例如下面的错误写法,在两个 php代码段之间有一个空行: //some code here ?> //这里应该是一个空行 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:

<!--print "<img src="yourfile.jpg" mce_src="/admin/blogs/yourfile.jp-->

"; //通常读取的是缓存文件 ?>

<!--print "<img src="yourfile.jpg?".time()."" mce_src="/admin/blogs/yourfile.jpg?&quot;.time().&quot-->

"; //增加了唯一的编号,使浏览器重新请求 w//print ""; ?> 2: 下面是个很好的函数,将图片传送给浏览器显示。

<!--p 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('Content-length: ' . strlen($iconcontent)); echo $iconcontent; die(0); } return false; } ?> 更多的实例: <?php // ok header('HTTP/1.1 200 OK'); //设置一个404头: header('HTTP/1.1 404 Not Found'); //设置地址被永久的重定向 header('HTTP/1.1 301 Moved Permanently'); //转到一个新地址 header('Location: http://www.example.org/'); //文件延迟转向: header('Refresh: 10; url=http://www.example.org/'); print 'You will be redirected in 10 seconds'; //当然,也可以使用html语法实现 // <meta http-equiv="refresh" content="10;http://www.example.org/ /> // override X-Powered-By: PHP: header('X-Powered-By: PHP/4.4.0'); header('X-Powered-By: Brain/0.6b'); //文档语言 header('Content-language: en'); //告诉浏览器最后一次修改时间 $time = time() - 60; // or filemtime($fn), etc header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); //告诉浏览器文档内容没有发生改变 header('HTTP/1.1 304 Not Modified'); //设置内容长度 header('Content-Length: 1234'); //设置为一个下载类型 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); // load the file to send: readfile('example.zip'); // 对当前文档禁用缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Pragma: no-cache'); //设置内容类型: header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); //纯文本格式 header('Content-Type: image/jpeg'); //JPG图片 header('Content-Type: application/zip'); // ZIP文件 header('Content-Type: application/pdf'); // PDF文件 header('Content-Type: audio/mpeg'); // 音频文件 header('Content-Type: application/x-shockwave-flash'); //Flash动画 //显示登陆对话框 header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="Top Secret"'); print 'Text that will be displayed if the user hits cancel or '; print 'enters wrong login data'; -->
分享到:
评论

相关推荐

    PHP 使用header函数设置HTTP头的示例解析 表头

    本篇文章是对PHP使用header函数设置HTTP头的示例进行了详细的分析介绍,需要的朋友参考下

    php中get_headers函数的作用及用法的详细介绍

    get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组。如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来判断远程文件是否存在)。 函数定义 array get_...

    php帮助文档,php。chm,php必备的中文手册

    RPM Header Reading 函数 CXXVII. runkit Functions CXXVIII. Satellite CORBA client extension [deprecated] CXXIX. SDO Functions CXXX. SDO XML Data Access Service Functions CXXXI. SDO Relational Data ...

    PHP5 完整官方 中文教程

    RPMReader — RPM Header Reading 函数 runkit — runkit Functions SAM — SAM - Simple Asynchronous Messaging Satellite — Satellite CORBA client extension [deprecated] SCA — SCA Functions SDO — SDO ...

    PHP手册2007整合中文版

    RPM Header Reading 函数 CXXXIX. runkit Functions CXL. SAM - Simple Asynchronous Messaging CXLI. Satellite CORBA client extension [deprecated] CXLII. SCA Functions CXLIII. SDO Functions CXLIV. SDO XML...

    PHP官方手册中文版

    RPM Header Reading 函数 CXXXIX. runkit Functions CXL. SAM - Simple Asynchronous Messaging CXLI. Satellite CORBA client extension [deprecated] CXLII. SCA Functions CXLIII. SDO Functions CXLIV. ...

    解析PHP中ob_start()函数的用法

    ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行/都会有”Header had all ready send by”的错误,这时可以先用ob_start()打开缓冲区PHP代码的数据块和echo()输出都会进入缓冲区...

    PHP5中文参考手册

    RPMReader — RPM Header Reading 函数 runkit — runkit Functions SAM — SAM - Simple Asynchronous Messaging Satellite — Satellite CORBA client extension [deprecated] SCA — SCA Functions SDO — SDO ...

    PHP5 开发手册 简体中文手册

    RPM Header Reading 函数 CXXVI. runkit Functions CXXVII. Satellite CORBA client extension [deprecated] CXXVIII. SDO Functions CXXIX. SDO XML Data Access Service Functions CXXX. SDO Relational Data ...

    WordPress主题制作中自定义头部的相关PHP函数解析

    主要介绍了WordPress主题制作中自定义头部的相关PHP函数解析,包括header_image()函数和get_custom_header()函数的用法讲解,需要的朋友可以参考下

    php输出图像的方法实例分析

    应用GD2函数绘制图像首先需要用header()函数发送HTTP头信息给浏览器,告知所要输出的图像的类型,然后应用imagegif()函数、imagejpeg()函数或者imagepng()函数等分别输出GIF,JPG和PNG格式的图片。 header(string,...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    在PHP手册中有详细的例子。 数组与哈希表 数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例229 通过header函数进行下载 295 4.3 文件遍历 296 实例230 读取整个文件的内容 296 实例231 文本文件的分页读取 298 4.4 文件操作 300 实例232 文件操作汇总 300 实例233 目录、文件定位器 302 实例234 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例229 通过header函数进行下载 295 4.3 文件遍历 296 实例230 读取整个文件的内容 296 实例231 文本文件的分页读取 298 4.4 文件操作 300 实例232 文件操作汇总 300 实例233 目录、文件定位器 302 实例234 ...

    PHP写API输出的时用echo的原因详解

    1.return 一般用于函数或方法的返回。 echo 才是输出(也就是显示) 如果你不输出,api有何作用。 2.return只能在php内部使用 对外,你要给别人解析,你就理解成输出,用echo 3.当然是echo了,如果是json最好加上...

    PHP读取RSS(Feed)简单实例

    PHP读取XML数据有三种方法:用XML解析函数、DOM模块和正则表达式,最直接地就是直接解析XML,获取XML中的数据。 以下是解析代码:复制代码 代码如下:&lt;?phperror_reporting(E_ALL^E_NOTICE); $rssfeed = “feed....

    Smarty中文手册 chm版

    Passing variable title to header template [传递变量标题给头模板] Dates [日期] WAP/WML Componentized Templates [组合的模板] Obfuscating E-mail Addresses [拒绝电子邮件地址] 19. Resources [相关资源]...

    PHP文件下载实例代码浅析

    文件下载的功能对一个网站而言基本上是必备的了,今天就来看看PHP是如何实现文件下载的吧。 无控制类型 这里说的无控制类型是指 没有添加PHP代码控制的资源可以被直接下载的那些类型。...header(co

Global site tag (gtag.js) - Google Analytics