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 分页类 扩展代码
Jun 11 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
php 修改、增加xml结点属性的实现代码
Oct 22 PHP
在Windows XP下安装Apache+MySQL+PHP环境
Feb 22 PHP
php生成图片验证码
Jun 09 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
Mar 23 PHP
php 基础函数
Feb 10 PHP
php实现表单提交上传文件功能
May 28 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
PHP上传图片到数据库并显示的实例代码
Dec 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
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
javascript中的有名函数和无名函数
2007/10/17 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
JavaScript学习笔记之Function对象
2015/01/22 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Python计算一个文件里字数的方法
2015/06/15 Python
python实现简单ftp客户端的方法
2015/06/28 Python
Python进程间通信之共享内存详解
2017/10/30 Python
django框架自定义用户表操作示例
2018/08/07 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
市场营销大学生职业规划书
2014/02/25 职场文书
就业意向书范文
2014/04/01 职场文书
企业指导教师评语
2014/04/28 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
离婚财产处理协议书
2014/09/30 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
Mysql binlog日志文件过大的解决
2021/10/05 MySQL