首页 > php教程 > php手册 > 正文

深入理解PHP高级技巧、面向对象与核心技术之调整浏览器缓存

php中文网
发布: 2016-06-06 19:59:52
原创
1584人浏览过

缓存页面是保存页面的内容的一种方式,然后在产生请求时提供这个保存的页面版本,而不是服务器上的版本。 对于动态的、PHP驱动的站点,有时我们需要确保终端用户获得的是最新的版本。 利用PHP的header()函数可以调整缓存,包括web浏览器的缓存和代理服务器的

    缓存页面是保存页面的内容的一种方式,然后在产生请求时提供这个保存的页面版本,而不是服务器上的版本。

对于动态的、PHP驱动的站点,有时我们需要确保终端用户获得的是最新的版本。

利用PHP的header()函数可以调整缓存,包括web浏览器的缓存和代理服务器的缓存。

四种标头的类型:
a). Last-Modified(最后的修改时间)

b). Expires(过期时间)

c). Pragma(编译提示)

立即学习PHP免费学习笔记(深入)”;

d).Cache-Control(缓存控制)

Last-Modified使用UTC时间值,使用来自服务器的更新页面的版本。

Expires标头用来表明缓存的版本过期,设置为一个以前的日期,就会强制使用服务器上的页面。

Header (“Expires: Jul 2013”);

Pragma表明页面数据应该如何被处理,可以避免对页面进行缓存。

Header(“Pragma:no-cache”);

Cache-Control能够更细致的控制

指令

含义

Public

可以在任何地方缓存

Private

只能呗浏览器缓存

No-cache

不能在任何地方缓存

Must-revalidate

缓存必须检查更新版本

Proxy-revalidate

代理缓存必须检查更新版本

Max-age

内容能被缓存的时间以秒为单位

s-maxage

覆盖共享缓存的max-age值设置

 

为了避免任何系统对页面进行缓存,可以这样设置标头:

Header(“Last-Modified:Thu,5Jun 2012 14:26:00 GMT”);//Right Now

Header (“Expires:Mon,26 Jul1997 05:00:00 GMT”);//way back when

Header(“Pragma:no-cache”);

Header(“Cache-Control:no-cache”);

虽然这种方法很常见,但是很笨拙,并不是每个PHP脚本都不能缓存,设置时活跃的站点也会把一些脚本缓存一分钟或者更长时间,(很活跃的站点会频繁的收到大量的请求而缓存版本可以减少服务器的负载)

       //connect to the database

       $dbc = mysqli_connect();

       //get latest dates as timestamps

       $q = 'SELECTUNIX_TIMESTAMP(MAX(date_added)),UNIX_TIMESTAMP(MAX(date_completed)) FROMtasks';

       $r = mysqli_query($dbc,$q);

       list($max_a,$max_c) = mysqli_fetch_array($r,MYSQL_NUM);

       $max = ($max_a > $max_c)?$max_a:$max_c;

       $interval = 60 * 60 * 6;

       header("Last-Modified:".gmdate("r",$max));

       header("Expires:".gmdate("r",($max+$interval)));

       header("Cache-Control:max-age = $interval");

?>

利用UNIX_TIMESTAMP()函数把返回值转换为整数。利用三元运算符把最新的时间赋值给$max.

1.     定义一个合理的缓存空间

$interval = 60*60*60;

2.     设置脚本最后修改时间为数据库的更新的最后时间。

header("Last-Modified:".gmdate("r",$max));

3.     设置有效期限是指当前时间加上前面定义的时间间隔。

header("Expires:".gmdate("r",($max+$interval)));

4.     取代使用一个日期值,使用秒数来设置变量max-age的值。

注意:

从理论上讲,缓存是一个不错的设计,他可以把不必要的服务器请求降低到最少,在适当控制的情况下,缓存对于服务器端和客户端都是有益的。放置在HTmL代码部分的Metaheader()方法更可靠。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号