说起 php 的header函数 肯定没有人不知道,但是 如果 面试的时候让你谈谈对header的认识 ,恐怕好多人都要抓瞎啦。
下面咱们就来详细聊聊 php的这个header
首先呢 自然 要从手册说起了,
一: 手册:
header — 发送原生 HTTP 头
void header ( string $string
[, bool $replace
= true [, int $http_response_code
]] )
replace
可选参数 replace
表明是否用后面的头替换前面相同类型的头。 默认情况下会替换。如果传入 FALSE
,就可以强制使相同的头信息并存。例如:
http_response_code
强制指定HTTP响应的值。注意,这个参数只有在报文字符串(string
)不为空的情况下才有效。
请注意 header() 必须在任何实际输出之前调用,不管是普通的 HTML 标签,还是文件或 PHP 输出的空行,空格。这是个常见的错误,在通过include,require,或者其访问其他文件里面的函数的时候,如果在header()被调用之前,其中有空格或者空行。 同样的问题也存在于单独的 PHP/HTML 文件中。
两种 特别的头
1、以“HTTP/”开头的 (case is not significant),将会被用来计算出将要发送的HTTP状态码。 例如在 Apache 服务器上用 PHP 脚本来处理不存在文件的请求(使用 ErrorDocument 指令), 就会希望脚本响应了正确的状态码。
eg:header("HTTP/1.0 404 Not Found");
2、是“Location:”的头信息。它不仅把报文发送给浏览器,而且还将返回给浏览器一个 REDIRECT(302)的状态码,除非状态码已经事先被设置为了201或者3xx。
eg:header("Location: http://www.example.com/");
二:用法
1跳转页面
header('Location:'.$url); //Location和":"之间无空格。
2.声明content-type
header('content-type:text/html;charset=utf-8');
3.在某个时间后执行跳转
header('Refresh: 10; url=http://www.baidu.com/'); //10s后跳转。
4.返回response状态码
header('HTTP/1.1 404 Not Found');
5.控制浏览器缓存
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-cache, must-revalidate");
header("Pragma: no-cache");
6.执行http验证
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
7. 执行下载操作
header('Content-Type: application/octet-stream'); //设置内容类型
header('Content-Disposition: attachment; filename="example.zip"'); //设置MIME用户作为附件
header('Content-Transfer-Encoding: binary'); //设置传输方式
header('Content-Length: '.filesize('example.zip')); //设置内容长度