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 相关文章推荐
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
php自动获取目录下的模板的代码
Aug 08 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
Oct 23 PHP
php实现按照权重随机排序数据的方法
Jan 09 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP时间类完整代码实例
Feb 26 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中SESSION使用中的一点经验总结
2012/03/30 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
激活 ActiveX 控件
2006/10/09 Javascript
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
bootstrap flask登录页面编写实例
2016/11/01 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
Python Web服务器Tornado使用小结
2014/05/06 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
Python3.6简单反射操作示例
2018/06/14 Python
python学习开发mock接口
2019/04/28 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
python实现二分查找算法
2020/09/18 Python
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
毕业生的求职信范文分享
2013/12/04 职场文书
生物科学专业职业规划书范文
2014/02/11 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL