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 相关文章推荐
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
php实现的双向队列类实例
Sep 24 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP的curl函数的用法总结
Feb 14 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
linux php mysql数据库备份实现代码
2009/03/10 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
python urllib爬虫模块使用解析
2019/09/05 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
python读取配置文件方式(ini、yaml、xml)
2020/04/09 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
爱国演讲稿500字
2014/05/04 职场文书
基层党建工作汇报材料
2014/08/15 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
防火标语大全
2014/10/06 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
租赁协议书
2015/01/27 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
golang操作rocketmq的示例代码
2022/04/06 Golang
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers