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

header()函数在php的使用很大,下面我来介绍利用它实现页面缓存的一些方法,但使用header前必须注意,在它之前不能任何输出,包括空格。

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

header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache"); // Date in the past

而且在设置的时候还得注意在header前不能有输出,否则header设置无效。

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

也有其他的方式:

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

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

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

<?php
//强制缓存一个月页面
  header("Cache-Control: public");
  header("Pragma: cache");
 
  $offset = 30*60*60*24; // cache 1 month
  $ExpStr = "Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT";
  header($ExpStr);
?>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载自cr180大神DiscuzX2.5完整目录结构【source程序文件库】 /source/admincp后台...
    cndaqiang阅读 4,413评论 1 2
  • 概览 缓存组件应该说是每个客户端程序必备的核心组件,试想对于每个界面的访问都必须重新请求势必降低用户体验。但是如何...
    默默_David阅读 5,934评论 1 9
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,078评论 1 45
  • 一、php过滤器 PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。测试、验证和过滤用户输入或自定...
    空谷悠阅读 3,043评论 0 5
  • 岁月极美 在于它必然流逝 春花,秋月,夏日,冬雪 ------三毛
    NXde水蔓青阅读 2,498评论 0 0