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 相关文章推荐
屏蔽浏览器缓存另类方法
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
浅谈php serialize()与unserialize()的用法
Jun 05 PHP
php格式输出文件var_export函数实例
Nov 15 PHP
PHP判断浏览器、判断语言代码分享
Mar 05 PHP
php内嵌函数用法实例
Mar 20 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
PHP压缩图片功能的介绍
Mar 21 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 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 图像函数大举例(非原创)
2009/06/20 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python多进程重复加载的解决方式
2019/12/13 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
实习生自我鉴定
2013/12/12 职场文书
公司周年庆典邀请函
2014/01/12 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
初一生物教学反思
2014/01/18 职场文书
餐厅筹备计划书
2014/04/25 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
依法行政工作汇报
2014/10/28 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS