Header()函数—is used to send raw HTTP headers.
1. 重定向
<?php
header(“Location: http://www.jb51.net”;);
exit; //在每个重定向之后都必须加上”exit”,避免发生错误,继续执行。
?>
<?php
header(“refresh: 2;url=http://www.jb51.net”;);
echo ”正在加载,请稍等…<br/> 三秒后自动跳转值<a
href=”http://www.jb51.net” mce_href=” http://www.jb51.net “>百度</a> ”;
?>
2. 禁止页面在IE 中缓存
不是获取Proxy或cache中的资料
<?php
header(‘Expires: Fri, 4 Dec 2010 09:00:00 GMT’);// 设置过期时间
header(‘Last-Modified:’.gmdate(‘D, d M Y H:i:s’).’GMT’);
header(‘Cache-control: no-store,no-cache,must-revalidat’);
header(‘Cache-control: post-check=0, pre-check=0’, false);
header(‘Program: no-cache’);//兼容 http1.0和https
?>
3. 让使用者找不到档案信息
1php 的header()函数向浏览器发送 status 标头
header(‘Status: 404 Not Found’);
浏览器返回状态信息。
2标准写法 header(‘http/1.0 404 Not Found’);
1. 部分是HTTP协议的版本号(HTTP-Version)
2. 状态代码(Status)
3. 原因短语( Reason-Phrase)
4. 下载文件
html 标签就可以实现普通文件下载,如果为了保密,就不能把文件链接告诉别人,可以用header函数实现文件下载。程序发送header信息是用来告诉Apache和浏览器下载文件的相关信息的。
<?php
function download_by_path($path_name,$save_name){
ob_end_clean();
$hfile=fopen($path_name,”rb”) or die(“Can not find file: $path_name ”);
header(“Content-type: application/octet-stream”);
//Content-type 的含义代表文件MIME类型是文件流格式,设置为上述形式
//浏览器就会知道,这是一个文件流格式的文件并提示用户下载。
header(“Content-Transfer-Encoding: binary”);
//以二进制的方式编码
header(“Accept-Ranges: bytes”);
//Accept-Ranges 是一个响应头标,它允许服务器指明将在给定的偏移和长度
//处,为资源组成部分的接受请求,该头标的值被理解为请求范围的度量单位。
header(“Content-length: ”filesize($path_name));
//Content-length 是指定包含于请求或响应中数据的字节长度。
header(“Content-Disposition: attachment;filename=”$save_name””);
//Content-Disposition: attachment 告诉浏览器,文件可以当做附件被下载的,
//下载后的文件名称为 $save_name 变量的值。
while(!feof($hfile)){
echo fread($hfile,1024*1024);
}
fclose($hfile);
}
html标签下载
<a href=”Web.rar”>download</a>
浏览器支持能够打开的格式,它都会默认直接在线打开(比如word或图片),不支持的格式,它就会弹出下载提示。最好是做成 .rar 格式。
5. header 函数前输出内容
一般来说在header函数前不能输出html内容,类似的还有 setcookie()和 session函数,这些函数需要在输出流中增加消息头部信息。
原因是:PHP脚本开始执行时,它可以同时发送http 消息头部(标题)信息和主体信息。http消息头部(来自header()或setcookie()函数)并不会立即发送,相反它被保存到一个列表中。这样就可以允许你修改标头信息,包括缺省的标头。但是,一旦脚本发送了任何非标头的输出(例如,使用HTML或print()调用),那么PHP就必须先发送完所有的Header,然后终止HTTP header。而后继续发送主体数据。从这时开始,任何添加或修改Header信息的试图都是不允许的。
解决办法:1php.ini 打开缓存(output_buffering)
2使用缓存函数 ob_start() , ob_end_flush()等
缓存被启动时,在脚本发送输出时,PHP并不发送 HTTP header 。相反,它将此输出通过管道( pipe) 输出到动态增加的缓存中。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后在发送输出缓存中的内容。