PHP下利用header()函数设置浏览器缓存的代码


Posted in PHP onSeptember 01, 2010

这涉及到4种头标类型:

Last-Modified(最后修改时间);
Expires(有效期限);
Pragma(编译指示);
Cache-Control(缓存控制);

前三个头标属于HTTP1.0标准。头标Last-Modified使用UTC日期时间值。如果缓存系统发现Last-Modified值比页面缓存版本的更接
近当前时间,他就知道应该使用来自服务器的新版本。

Expires 表明了缓存版本何时应该过期(格林威治标准时间)。把它设置为一个以前的时间就会强制使用服务器上的页面。

Pragma生命了页面数据应该如何被处理。可以这样避免对页面进行缓存:

header("Pragma:no-cache");

Cache-Co0ntrol 头标是在HTTP1.1里添加的,能够实现更细致的控制(还应该继续使用HTTP1.0头标)。Cache-Control的设置有
很多,如下表:

指令 含义
public 可以在任何地方缓存
private 只能被浏览器缓存
no-cache 不能在任何地方缓存
must-revalidate 缓存必须检查更新版本
proxy-revalidate 代理缓存必须检查更新版本
max-age 内容能够被缓存的时期,以秒表示
s-maxage 覆盖共享缓存的max-age设置
下面实例利用header()设置浏览器的缓存:
<?php # Script 2.7 - view_tasks.php 
// Connect to the database: 
$dbc = @mysqli_connect ('localhost', 'username', 'password', 'test') OR die ('<p>Could not connect to the database!</p></body></html>'); 
// Get the latest dates as timestamps: 
$q = 'SELECT UNIX_TIMESTAMP(MAX(date_added)), UNIX_TIMESTAMP(MAX(date_completed)) FROM tasks'; 
$r = mysqli_query($dbc, $q); 
list($max_a, $max_c) = mysqli_fetch_array($r, MYSQLI_NUM); 
// Determine the greater timestamp: 
$max = ($max_a > $max_c) ? $max_a : $max_c; 
// Create a cache interval in seconds: 
$interval = 60 * 60 * 6; // 6 hours 
// Send the header: 
header ("Last-Modified: " . gmdate ('r', $max)); 
header ("Expires: " . gmdate ("r", ($max + $interval))); 
header ("Cache-Control: max-age=$interval"); 
?>

1.连接数据库后获取数据表中最新的日期值date_added,date_completed,用UNIX_TIMESTAMP()函数将返回值转化为整数然后获取最大值赋予$max。
2.定义一个合理缓存时间。
$interval=60*60*6

合理值屈居于页面本身、访问者的数量和页面的更新频率,以上代码为6个小时。
3.发送Last-Modified头标。
header("Last-Modified:".gmdate("r",($max+$interval)));

gmdate()函数使用了参数"r"时,会根据HTTP规范返回相应的日期格式。
4.设置Expires头标。
header ("Expires: " . gmdate ("r", ($max + $interval)));

5.设置Cache_Control头标。
header ("Cache-Control: max-age=$interval");
PHP 相关文章推荐
MySQL相关说明
Jan 15 PHP
PHPMyAdmin 快速配置方法
May 11 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
php计算十二星座的函数代码
Aug 21 PHP
PHP伪静态Rewrite设置之APACHE篇
Jul 30 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
laradock环境docker-compose操作详解
Jul 29 PHP
PHP底层运行机制与工作原理详解
Jul 31 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 #PHP
php采集时被封ip的解决方法
Aug 29 #PHP
PHP isset()与empty()的使用区别详解
Aug 29 #PHP
php Notice: Undefined index 错误提示解决方法
Aug 29 #PHP
php下统计用户在线时间的一种尝试
Aug 26 #PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 #PHP
PHP下对字符串的递增运算代码
Aug 21 #PHP
You might like
杏林同学录(九)
2006/10/09 PHP
将OICQ数据转成MYSQL数据
2006/10/09 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
python 域名分析工具实现代码
2009/07/15 Python
python实现的文件夹清理程序分享
2014/11/22 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
2019/09/04 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
心得体会开头
2014/01/01 职场文书
星级党支部申报材料
2014/05/31 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
维稳工作承诺书
2015/01/20 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
农业项目投资意向书
2015/05/09 职场文书
酒店员工管理制度
2015/08/05 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书