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 download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
PHP缓存技术的使用说明
Aug 06 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
php中将一个对象保存到Session中的方法
Mar 13 PHP
php中删除、清空session的方式总结
Oct 09 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
php时间函数用法分析
May 28 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP实现的简单组词算法示例
Apr 10 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 PHP
PHP多进程简单实例小结
Nov 09 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
8个出色的WordPress SEO插件收集
2011/02/26 PHP
33道php常见面试题及答案
2015/07/06 PHP
PHP文件上传类实例详解
2016/04/08 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
js读写(删除)Cookie实例详解
2013/04/17 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
python实现给字典添加条目的方法
2014/09/25 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
德国购买门票网站:ADticket.de
2019/10/31 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
初一英语教学反思
2014/01/11 职场文书
安全检查验收制度
2014/01/12 职场文书
大学生在校学习的自我评价
2014/02/18 职场文书
英语教师自荐信
2014/05/26 职场文书
教师个人读书活动总结
2014/07/08 职场文书
投标授权委托书范文
2014/08/02 职场文书
初中中等生评语
2014/12/29 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang