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目录管理函数小结
Sep 10 PHP
php 301转向实现代码
Sep 18 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
深入理解PHP中的global
Aug 19 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
php构造函数的继承方法
Feb 09 PHP
php结合curl实现多线程抓取
Jul 09 PHP
2017年最好用的9个php开发工具推荐(超好用)
Oct 23 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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
聊天室php&amp;mysql(四)
2006/10/09 PHP
ThinkPHP php 框架学习笔记
2009/10/30 PHP
JS request函数 用来获取url参数
2010/05/17 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
python实现kMeans算法
2017/12/21 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python实现判断一行代码是否为注释的方法
2018/05/23 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
pandas 对group进行聚合的例子
2019/12/27 Python
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
工厂厂长岗位职责
2013/11/08 职场文书
无毒社区工作方案
2014/05/23 职场文书
长城导游词
2015/01/30 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
公司出差管理制度范本
2015/08/05 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
python​格式化字符串
2022/04/20 Python