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 相关文章推荐
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
Dec 28 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 PHP
php图片添加文字水印实现代码
Mar 15 PHP
PHP getDocNamespaces()函数讲解
Feb 03 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
php字符串函数 str类常见用法示例
May 15 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常用代码
2006/11/23 PHP
php实现短信发送代码
2015/07/05 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
Smarty模板配置实例简析
2019/07/20 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
package.json文件配置详解
2017/06/15 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
python中partial()基础用法说明
2018/12/30 Python
Python中的heapq模块源码详析
2019/01/08 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
Python读取实时数据流示例
2019/12/02 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
求职意向书范文
2014/04/01 职场文书
出生证明公证书
2014/04/09 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2014年行风建设工作总结
2014/12/01 职场文书
党员个人党性分析材料
2014/12/18 职场文书
2015年商场工作总结
2015/04/27 职场文书
心灵点滴观后感
2015/06/02 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书