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 cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
PHP 解决session死锁的方法
Jun 20 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
CodeIgniter整合Smarty的方法详解
Aug 25 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
Javascript 强制类型转换函数
2009/05/17 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
2016/06/12 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
[02:04]2014DOTA2国际邀请赛 DK一个时代的落幕
2014/07/21 DOTA
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
Python爬豆瓣电影实例
2018/02/23 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Python中的延迟绑定原理详解
2019/10/11 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
会计自我鉴定
2013/11/02 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android