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 获取select下拉列表框的值
May 08 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 PHP
Yii框架数据模型的验证规则rules()被执行的方法
Dec 02 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 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
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
2020/08/06 PHP
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
Python3.0与2.X版本的区别实例分析
2014/08/25 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
详解python eval函数的妙用
2017/11/16 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
Python 变量的创建过程详解
2019/09/02 Python
为什么python比较流行
2020/06/19 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
面向对象设计的原则是什么
2013/02/13 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
产品质量承诺范本
2014/03/31 职场文书
超越自我演讲稿
2014/05/21 职场文书
合伙经营协议书范本
2014/09/13 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
党员民主评议个人总结
2014/10/20 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书