架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 422|回复: 0

php header()函数设置页面Cache缓存

[复制链接]
发表于 2019-7-26 13:59:17 | 显示全部楼层
zu
header()函数在php的使用很大,下面我来介绍利用它实现页面缓存的一些方法,但使用header前必须注意,在它之前不能任何输出,包括空格。

不被缓存的设置

手册上,我们对于cache都是写着如何设置,以便让代码不被cache:

  1. header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); // HTTP/1.1
  2. header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
  3. header("Pragma: no-cache"); // Date in the past
复制代码
而且在设置的时候还得注意在header前不能有输出,否则header设置无效。

页面或图片缓存的设置

如何给页面设置Cache,虽然我们知道有一些办法,比如 E-TAG之类的。当然也有简单的设置:
比如我们在输出前,对内容进行md5,将它当成e-tag只要没变化,就不会有影响。(这里的话和服务器状态码304类似,自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。)
也有其他的方式:

  1. //设置时间必须是GMT格式的
  2. $seconds_to_cache = 3600;
  3. $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
  4. header("Expires: $ts");
  5. header("Pragma: cache");
  6. header("Cache-Control: max-age=$seconds_to_cache");
复制代码

缓存1小时,主要是过期时间得用gmdate来设置,而不是date,这个要注意,其他都差不多。max-age要和expire能够对得上。

对于PHP产生的动态内容,只需要在内容输出之前输出强制使用缓存的header即可,比如下面的代码即要求浏览器缓存文件1个月:

  1. <?php
  2. //强制缓存一个月页面
  3.   header("Cache-Control: public");
  4.   header("Pragma: cache");

  5.   $offset = 30*60*60*24; // cache 1 month
  6.   $ExpStr = "Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT";
  7.   header($ExpStr);
  8. ?>
复制代码






上一篇:可负责的领导力
下一篇:Java oss阿里云上传文件设置下载文件名
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-4-2 01:06

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表