php header()函数的具体作用是向客户端发送一个原始 HTTP 标头[Http Header]到客户端。
标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔。在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以使用输出缓存来解决此问题)。
下面举一些比较常见的header用法示例:
(1)使用header实现重定向(等价于代替用户在地址栏输入url)。
3 |
exit;//注意务必在每个重定向之后都必须加上exit,避免发生错误后,代码会继续向下执行 |
04 |
@功能:等待指定的时间,然后再跳转到指定页面(代替html meta方式) |
07 |
echo '正在加载,请稍等...<br>三秒后自动跳转'; |
09 |
说明:若等待时间为0,则与header("location:")等效。 |
(2)禁止页面在浏览器中被缓存。
如果因业务需要访问者每次都浏览页面都是得到最新的资料,而不是 Proxy 或 cache 中的资料,可以使用下列的标头:
2 |
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); |
3 |
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); |
4 |
header('Cache-Control: no-store, no-cache, must-revalidate'); |
5 |
header('Cache-Control: post-check=0, pre-check=0', false ); |
6 |
header('Pragma: no-cache'); //兼容http1.0和https |
其实这里主要就是设置下面几个选项的值:
CacheControl = no-cache
Pragma=no-cache
Expires = -1
当HTTP1.1服务器指定CacheControl = no-cache时,浏览器就不会缓存该网页。旧式 HTTP 1.0 服务器不能使用 Cache-Control 标题。所以为了向后兼容 HTTP 1.0 服务器,IE使用Pragma:no-cache 标题对 HTTP 提供特殊支持。
有关Cache-control的具体介绍请参考本站文章:
网页缓存控制 Cache-control 常见的取值有private、no-cache、max-age、must-revalidate 介绍
如果客户端通过安全连接 (https://) 与服务器通讯,且服务器在响应中返回 Pragma:no-cache 标题,则 Internet Explorer 不会缓存此响应。注意:Pragma:no-cache 仅当在安全连接中使用时才防止缓存,如果在非安全页中使用,处理方式与 Expires:-1 相同,该页将被缓存,但被标记为立即过期。
Expires是个好东东,如果服务器上的网页经常变化,就把它设置为-1,表示立即过期。如果一个网页每天凌晨1点更新,可以把Expires设置为第二天的凌晨1点。
(3)让使用者的浏览器出现找不到档案的信息。
网上很多资料这样写:php的函数header()可以向浏览器发送Status标头,如 header(”Status: 404 Not Found”)。但是我发现实际上浏览器返回的响应却是:
HTTP/1.x 200 OK
Date: Thu, 03 Aug 2006 07:49:11 GMT
Server: Apache/2.0.55 (Win32) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Status: 404 Not Found
Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html
查了一些资料,正确的写法是:
header(”http/1.1 404 Not Found”);
第一部分为HTTP协议的版本(HTTP-Version);第二部分为状态代码(Status);第三部分为原因短语(Reason-Phrase)。
(4)让访问者下载档案(隐藏文件的位置)。
我们都知道通过原始的url就可以实现普通文件下载,但是如果我们需要保密文件在服务器上的存储位置,就不能直接把文件链接显示出来,这里我们就可以通过header函数隐藏文件地址同时又实现文件的下载,具体代码如下:
2 |
header("Content-type: application/x-gzip"); |
3 |
header("Content-Disposition: attachment; filename=phpernote.zip"); |
4 |
header("Content-Description: PHP3 Generated Data"); |
另外,关于使用php进行文件下载,可以参照本站文章:
PHP文件下载函数(代码)
下面列举一些并不是非常常见的header的用法示例:
04 |
header('HTTP/1.1 200 OK'); |
07 |
header('HTTP/1.1 404 Not Found'); |
10 |
header('HTTP/1.1 301 Moved Permanently'); |
13 |
header('Content-language: en'); |
16 |
$time = time() - 60; // or filemtime($fn), etc |
17 |
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); |
20 |
header('HTTP/1.1 304 Not Modified'); |
23 |
header('Content-Length: 1234'); |
26 |
header('Content-Type: text/html; charset=iso-8859-1'); |
27 |
header('Content-Type: text/html; charset=utf-8'); |
28 |
header('Content-Type: text/plain'); //纯文本格式 |
29 |
header('Content-Type: image/jpeg'); //JPG图片 |
30 |
header('Content-Type: application/zip'); // ZIP文件 |
31 |
header('Content-Type: application/pdf'); // PDF文件 |
32 |
header('Content-Type: audio/mpeg'); // 音频文件 |
33 |
header('Content-Type: application/x-shockwave-flash'); //Flash动画 |
- 转载:Hadoop排序工具用法小结
本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...
- [No000010]Ruby 中一些百分号(%)的用法小结
#Ruby 中一些百分号(%)的用法小结 #这篇文章主要介绍了Ruby 中一些百分号(%)的用法小结,需要的朋友可以参考下 what_frank_said = "Hello!"#% ...
- C++ typedef用法小结 (※不能不看※)
C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...
- 函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)
函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符 ...
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
- 英语语法最终珍藏版笔记- 21it 用法小结
it 用法小结 it 在英语中的意思较多,用法较广,现总结如下. 一.it作句子的真正主语 1.it 指前面已经提到过的人或事物,有时指心目中的或成为问题的人或事物,作真正主语. 例如: What’s ...
- [转]ssh常用用法小结
ssh常用用法小结 1.连接到远程主机: 命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机, ...
- 结构体定义 typedef struct 用法详解和用法小结
typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别在于:若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,stru ...
- typedef用法小结
typedef用法小结- - 注意:本文转自网络,版权归原作者所有. typedef typedef用法小结- - 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等 ...
随机推荐
- tabBar选中底部弹出窗口
//UITabBarControllerDelegate方法 - (BOOL)tabBarController:(UITabBarController *)tabBarController shoul ...
- pyqt5 窗体布局
窗体布局 1使用qtdesigner新建一个对话框,然后拖放几个按钮和文本框,按钮使用水平布局,效果如下: 鼠标选中水平布局再选中文本框,进行垂直布局,如下: 垂直布局后的效果如下: 然后,如何让窗体 ...
- Apache .htaccess Rewrite解决问号匹配的写法
如news.asp?id=123 需要把它定向到 news/123.html 这个用 RewriteRule 怎么写啊? RewriteRule ^news\.asp\?id=(\d+)$ news/ ...
- 用linux的shell脚本把目录下面的所有文件的文件内容中的小写字母改成大写字母
最近工作中,产品组的同事给出的数据里面都是小写字母 ,但是引擎组的同事要求他们拿到的从数据里面解析出的结构体里面存储的要都是大写结构,这让我们数据预处理组很尴尬啊,,所以在写了个这么样的脚本,在解析数 ...
- iOS:实现表格填充和选择操作
功能:创建一个列表,用数组填充表格,并支持选择列表行 // // main.m // Hello // // Created by lishujun on 14-8-28. // Copyright ...
- Ubuntu下安装nvidia显卡驱动
layout: post title: Ubuntu下安装nvidia显卡驱动 date: 2015-10-02 17:19:06 categories: 常用命令 tags: 显卡 驱动 最近一直在 ...
- bzoj 1853: [Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1170 Solved: 406[Submit][Status] ...
- Codeforces Round #205 (Div. 2) : C
感觉像是一个数位dp,高位的1如果不选的话,前面低位的数都可以选:不然只能选择为1的数: 代码: #include<iostream> #include<algorithm> ...
- php的ob实现页面静态化
php页面静态化的原理,用最少的代码解释页面静态化 如何应用:在插入或更新数据到数据库时,就执行一下代码是一种比较好的方法.比如:php执行add()方法时(就是插入数据时) //开启缓存 Ob_st ...
- jsp分页技术
1.以下为分页类: import java.io.Serializable; import java.util.List; import org.apache.commons.lang.bui ...