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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
Sep 05 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
选择PHP作为网站开发语言的原因分享
Jan 03 PHP
一组PHP加密解密函数分享
Jun 05 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
PHP支付系统设计与典型案例分享
Aug 02 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 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下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
2020/10/29 Javascript
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python绘图库Matplotlib的安装
2014/07/03 Python
Python中暂存上传图片的方法
2015/02/18 Python
Python3.x中自定义比较函数
2015/04/24 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Django开发中的日志输出的方法
2018/07/02 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
pytorch梯度剪裁方式
2020/02/04 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
英国袜子店:Sock Shop
2017/01/11 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
酒店应聘自荐信
2013/11/09 职场文书
财务主管岗位职责
2014/02/28 职场文书
销售活动策划方案
2014/08/26 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书