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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
php连接函数implode与分割explode的深入解析
Jun 26 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 PHP
php中引用符号(&amp;)的使用详解
Nov 13 PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
Jan 08 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
PHP PDOStatement::bindColumn讲解
Jan 30 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php discuz 主题表和回帖表的设计
2009/03/13 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
详解VUE 数组更新
2017/12/16 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
使用C++扩展Python的功能详解
2018/01/12 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
pandas.cut具体使用总结
2019/06/24 Python
详细分析Python collections工具库
2020/07/16 Python
Ruby如何定义一个类
2012/10/08 面试题
公司清洁工岗位职责
2013/12/14 职场文书
研讨会主持词
2014/04/02 职场文书
初一新生军训方案
2014/05/22 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
不同意离婚答辩状
2015/05/22 职场文书
电影雷锋观后感
2015/06/10 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python