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面试题附答案
Jan 07 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
ThinkPHP3.1查询语言详解
Jun 19 PHP
php中file_get_content 和curl以及fopen 效率分析
Sep 19 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
Laravel用户授权系统的使用方法示例
Sep 16 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
phpfans留言版用到的install.php
2007/01/04 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
Js 中debug方式
2010/02/07 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
webpack多页面开发实践
2017/12/18 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
python框架flask表单实现详解
2019/11/04 Python
Python文件操作方法详解
2020/02/09 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
python 基于Apscheduler实现定时任务
2020/12/15 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
大学生毕业求职简历的自我评价
2013/10/24 职场文书
食品采购员岗位职责
2014/04/14 职场文书
岗位职责说明书模板
2014/07/30 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
自我评价优缺点范文
2015/03/11 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
结婚典礼主持词
2015/06/29 职场文书
会计做账心得体会
2016/01/22 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书