欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Php header()函数语法及使用代码

程序员文章站 2022-08-28 09:47:39
语法:复制代码 代码如下:void header(string $string[,bool $replace=true [, int $http_response_code...

语法:

复制代码 代码如下:

void header(string $string[,bool $replace=true [, int $http_response_code)

向客户端发送原始的http报头
需注意:
header函数必须在任何实际的输出前调用,无论是一般的html标签、文件中空行,或者来自php。就是在这个函数之前不能有任何形式的输出。
参数说明:

参数 描述
string 必需。规定要发送的报头字符串。
replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。
默认是 true(替换)。false(允许相同类型的多个报头)。

http_response_code 可选。把 http 响应代码强制为指定的值。(php 4 以及更高版本可用)
常见用法实例:

一、发送服务器状态码

复制代码 代码如下:

header('http/1.0 404 not found');

常用状态码:

状态码 说明
100-199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200-299 成功接收请求,并已完成整个处理过程,常用200
300-399 未完成请求,客户端需要进一步细化请求,比如,请求的资源已经移动到一个新的地址,常用302,304
400-499 客户端请求有误 常用404
500-599 服务器端出现错误,常用500
详细见:http&ftp相应提示信息

二、页面跳转

复制代码 代码如下:

// 立即跳转
header('location: //www.jb51.net/');

// 3秒后跳转
header('refresh:3;url=//www.jb51.net');

3.设置浏览器缓存

强制浏览器不进行缓存!
[code]
//header('expires:-1');
header('expires: mon, 26 jul 1997 05:00:00 gmt');
header('cache-control:no-cache,must-revalidate');
header('pragma:no-cache');
header('last-modified: '. date('d, j m y h:i:s t') );


说明:
expires后的时间必须是gmt格式的 如:gmdate(“m d y h:i:s”);
cache-control常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况。
cache-directive 说明
public 所有内容都将被缓存
private 内容只缓存到私有缓存中
no-cache 所有内容都不会被缓存
no-store 所有内容都不会被缓存到缓存或 internet 临时文件中
must-revalidation/proxy-revalidation 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证
max-age=xxx (xxx is numeric) 缓存的内容将在 xxx 秒后失效, 这个选项只在http 1.1可用, 并如果和last-modified一起使用时, 优先级较高
打开新窗口
如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间就不会重新访问服务器,如:
复制代码 代码如下:

header('cache-control:max-age=5');

表示当访问此网页后的5秒内不会再次访问服务器

在地址栏回车
如果值为private或must-revalidate,则只有第一次访问时会访问服务器,以后就不在访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
按后退按钮
如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问
按刷新按钮
无论何值,都会重复访问。当指定cache-control值为“no-cache”时,访问此页面不会在internet临时文章夹留下页面备份。另外,通过指定“expires”值也会影响到缓存。例如,指定expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问:
expires: fri, 31 dec 1999 16:00:00 gmt
关于”last-modified
在浏览器第一次请求某一个url时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个last-modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
last-modified: fri, 12 may 2006 18:53:33 gmt
客户端第二次请求此url时,根据 http 协议的规定,浏览器会向服务器传送 if-modified-since 报头,询问该时间之后文件是否有被修改过:

if-modified-since: fri, 12 may 2006 18:53:33 gmt
如果服务器端的资源没有变化,则自动返回 http 304 (not changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。

last-modified提高性能
聪明的开发者会把last-modified 和etags请求的http报头一起使用,这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生 last-modified/etag标记,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。

过程如下:

客户端请求一个页面(a)
服务器返回页面a,并在给a加上一个last-modified
客户端展现该页面,并将页面连同last-modified一起缓存
客户再次请求页面a,并将上次请求时服务器返回的last-modified一起传递给服务器
服务器检查该last-modified,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。

三、文件下载
比如下载一个pdf文件

复制代码 代码如下:

// we'll be outputting a pdf
header('content-type: application/pdf');

// it will be called downloaded.pdf
//表明他是附件,进行命名并下载
header('content-disposition: attachment; filename="downloaded.pdf"');

// the pdf source is in 1.pdf
readfile('1.pdf');

其实这样要更好的了解这些!
复制代码 代码如下:

header('content-type:application/octet-sream');
header('accept-ranges:bytes');

//依字节返回
header('content-disposition:attachement;filename="文件名"');
header('accept-length:'.$filesize);