header
上一篇 /
下一篇 2008-01-25 17:30:35
/ 个人分类:PHP基础
(PHP 3, PHP 4, PHP 5)
header -- 发送一个原始 HTTP 标头
说明
void
header( string string [, bool replace [, int http_response_code]] )
header()函数用来发送一个原始HTTP标头。有关HTTP标头的更多内容见HTTP/1.1 规范。
可选参数replace指明是替换掉前一条类似的标头还是增加一条相同类型的标头。默认为替换,但如果将其设为FALSE则可以强制发送多个同类标头。例如:
第二个可选参数http_response_code强制将 HTTP 响应代码设为指定值(此参数是 PHP 4.3.0 新加的)。
有两种特殊的 header 调用。第一种是标头以字符串“HTTP/”(大小写不重要)开头的,可以用来确定要发送的 HTTP 状态码。例如,如果配置了 Apache 用 PHP 来处理找不到文件的错误处理请求(使用ErrorDocument指令),需要确保脚本产生了正确的状态码。
注:HTTP 状态码标头行总是第一个被发送到客户端,而并不管实际的header()调用是否是第一个。除非 HTTP 标头已经发送出去,任何时候都可以通过用新的状态行调用header()函数来覆盖原先的。
第二种特殊情况是以“Location:”标头。它不只是把这个标头发送回浏览器,它还将一个REDIRECT(302)状态码返回给浏览器,除非之前已经发出了某个3xx状态码。
注:HTTP/1.1 标准需要一个绝对地址的URI做为Location:的参数, 但有一些客户端支持相对 URI。通常可以使用$_SERVER['HTTP_HOST']、$_SERVER['PHP_SELF']及dirname()函数来自己从相对 URI 产生出绝对 URI:
PHP 脚本通常会产生一些动态内容,这些内容必须不被浏览器或代理服务器缓存。很多代理服务器和浏览器都可以被下面的方法禁止缓存:
注:可能会发现即使不输出上面所有的代码,网页也没有被缓冲。用户有很多选项可以设置来改变浏览器的默认缓存行为。通过发送上述标头,应该可以覆盖任何可以导致脚本页面被缓存的设置。
另外,当使用了 session 时,利用session_cache_limiter()函数和session.cache_limiter选项可以用来自动产生正确的缓存相关标头。
要记住header()必须在任何实际输出之前调用,不论是来自普通的 HTML 标记,空行或者 PHP。有一个常见错误就是在通过include(),require()或一些其它的文件存取类函数读取代码时,有一些空格或者空行在调用header()之前被发送了出去。同样在一个单独的 PHP/HTML 文件中这个错误也很普遍。
注:自 PHP 4 起,可以通过一些输出缓冲函数来解决这个问题。代价是把所有向浏览器的输出都缓存在服务器,直到下命令发送它们。可以在代码中使用ob_start()及ob_end_flush()来实现这样的功能,或者通过修改php.ini中的output_buffering配置选项来实现,也可以通过修改服务器配置文件来实现。
如果想提示用户保存所发送的数据,例如一个生成的 PDF 文件,可以通过发送Content-Disposition标头提供推荐的文件名来强制浏览器弹出一个保存文件对话框。
注:Microsoft Internet Explorer 4.01 中的一个漏洞使得该机制无法正常工作,无解决方案。在 Microsoft Internet Explorer 5.5 中也有个漏洞影响到这一点,升级到 Service Pack 2 或更高版本可以解决。
注:在安全模式下,如果设定了WWW-Authenticate标头(用于 HTTP 认证)则脚本的 UID 会添加到其中的realm部分中去。
相关阅读:
- website (echoszm, 2007-12-01)
- 做项目过程中学到的PHP知识收集 (choiniao, 2007-12-01)
- 转:看实例学正则表达式 (lx4909, 2007-12-04)
- PHP中类的常识 (echoszm, 2007-12-05)
- MySQL 数据库乱码问题解决办法 (echoszm, 2007-12-07)
- 在当前时间上加整年或整月或整日 (xiongxiaoming, 2007-12-19)
- 定义常量时const和define的区别 (xiongxiaoming, 2007-12-19)
- PHP导入导出Excel方法小结 (xiongxiaoming, 2007-12-23)
- 我用过的大文件上传方式 (xiongxiaoming, 2007-12-23)
- header() 完整显示代码 (linvo, 2008-1-02)
导入论坛
收藏
分享给好友
管理
举报
TAG:
header
PHP基础