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 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
PHP全概率运算函数(优化版) Webgame开发必备
Jul 04 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
php中sql注入漏洞示例 sql注入漏洞修复
Jan 24 PHP
php读取3389的脚本
May 06 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
php json转换成数组形式代码分享
Nov 10 PHP
PHP中的Streams详细介绍
Nov 12 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
php实现微信支付之现金红包
May 30 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 27 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/04/25 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
php按单词截取字符串的方法
2015/04/07 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
element-ui 本地化使用教程详解
2019/10/28 Javascript
vue之延时刷新实例
2019/11/14 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python作用域用法实例详解
2016/03/15 Python
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
python 中关于pycharm选择运行环境的问题
2020/10/31 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
简短证婚人证婚词
2014/01/09 职场文书
大班亲子运动会方案
2014/06/10 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL