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出错界面
Oct 09 PHP
搜索和替换文件或目录的一个好类--很实用
Oct 09 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
PHP include_path设置技巧分享
Jul 03 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 PHP
windows 2008r2+php5.6.28环境搭建详细过程
Jun 18 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
Laravel框架创建路由的方法详解
Sep 04 PHP
thinkphp5 路由分发原理
Mar 18 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+DBM的同学录程序(5)
2006/10/09 PHP
PHP编码规范-php coding standard
2007/03/16 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
php简单实现多字节字符串翻转的方法
2015/03/31 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
Python编写屏幕截图程序方法
2015/02/18 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
python函数形参用法实例分析
2015/08/04 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
如何写出好的Java代码
2014/04/25 面试题
教师开学感言
2014/02/14 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
内科护士节演讲稿
2014/09/11 职场文书
道德模范事迹材料
2014/12/20 职场文书
公务员政审材料范文
2014/12/23 职场文书