php header函数

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到浏览器,然后在发送输出缓存中的内容。

原文地址:https://www.cnblogs.com/air5215/p/5351789.html