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

手册上,我们对于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只要没变化,就不会有影响。也有其他的方式:

 代码如下 复制代码

$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,这个要注意,其他都差不多。maxage要和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);
?>

对于静态文件,一般的服务器都支持第3级缓存状态。要想达到第四级的缓存效果,要么像之前GZIP压缩那样,用PHP外包一层,然后用PHP处理。要么需要服务器端的支持,APACHE的一个模块mod_expires支持给文件添加expires header。把下面的代码加入你的blog目录下的.htaccess文件,如果你的服务器安装了mod_expires模块,则将自动生效,图片等强制缓存一个月,html文档缓存10分钟。如果该模块没有安装,也不会出错。

 代码如下 复制代码

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType application/x-shockwave-flash A2592000
ExpiresByType text/css A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/html A600
</IfModule>

在这里有mod_expires更详细的文档和教程。不过我要说明的是,mod_expires在绝大多数服务器上都没安装

时间: 2024-09-26 13:40:48

php header()函数设置页面Cache缓存的相关文章

PHP下利用header()函数设置浏览器缓存的代码_php技巧

这涉及到4种头标类型: Last-Modified(最后修改时间); Expires(有效期限); Pragma(编译指示): Cache-Control(缓存控制); 前三个头标属于HTTP1.0标准.头标Last-Modified使用UTC日期时间值.如果缓存系统发现Last-Modified值比页面缓存版本的更接 近当前时间,他就知道应该使用来自服务器的新版本. Expires 表明了缓存版本何时应该过期(格林威治标准时间).把它设置为一个以前的时间就会强制使用服务器上的页面. Pragm

PHP 使用header函数设置HTTP头的示例解析 表头_php技巧

如下所示: 复制代码 代码如下: //定义编码  header( 'Content-Type:text/html;charset=utf-8 ');  //Atom  header('Content-type: application/atom+xml');  //CSS  header('Content-type: text/css');  //Javascript  header('Content-type: text/javascript');  //JPEG Image  header(

页面的缓存与不缓存设置

HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器端,中间缓存服务器端(如:squid等),Web服务器端.本文 讨论头信息 中带缓存控制信息的HTML页面(JSP/Servlet生成好出来的也是HTML页面)在中间缓存服务器中的缓存情况.       HTTP协议中关于缓存的信息头关键字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等.       HTTP1.0中通过Pragma 控制页面缓存

页面的缓存与不缓存设置及html页面中meta的作用_java

HTML的HTTP协议头信息中控制着页面在几个地方的缓存信息,包括浏览器端,中间缓存服务器端(如:squid等),Web服务器端.本文讨论头信息 中带缓存控制信息的HTML页面(JSP/Servlet生成好出来的也是HTML页面)在中间缓存服务器中的缓存情况. HTTP协议中关于缓存的信息头关键字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等. HTTP1.0中通过Pragma 控制页面缓存,可以设置:Pragma或

php设置静态内容缓存时间的方法_php技巧

本文实例讲述了php设置静态内容缓存时间的方法.分享给大家供大家参考.具体方法分析如下: 在利用百度工具作一个小测试时提示我们需要设置静态内容缓存时间了,我自己没有服务器权限操作,只能从其它方面入手了,自己学习php的我搜索后发现可以使用header函数来实现浏览器缓存页面的时间,具体如下. 设置静态内容缓存时间,代码如下: 复制代码 代码如下: $interval = 60 * 60 * 6; // 6 hours  header ("Last-Modified: " . gmdat

ASP.NET 2.0中的页面输出缓存

asp.net|缓存|页面 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出

ASP.NET 2.0中的页面输出缓存_实用技巧

静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期.这个过程中,缓存不需要再次经过页面处理生命周期.这样可以缩短请求响应时间,提高应用程序性能.很显然,页面输出缓存适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面.对于那些数据经常更新的页面,则不适用.默认情况下,ASP.NET 2.0启用了页面输出缓存功能,但并不缓存任何响应的输出.开发人员必须通过设置,使得某些页面的响应成为缓存的一部分. 设置页面输出缓存可以使用以下两种方式:一

wordpress中Hyper Cache缓存插件安装和使用方法

本文就来介绍wordpress提速插件中比较小巧但又很管用的缓存插件--Hyper Cache .那么,wordpress缓存插件Hyper Cache如何安装和使用?下面,我们就一起来看看吧. 第一步.安装Hyper Cache 缓存插件. 进入wp的管理后台,点击"插件">>"安装插件" ,再搜索Hyper Cache ,第一个就是了,安装我就不说了. 第二步.启动Hyper Cache 缓存插件. 安装完成以后,点击启用插件.然后,点击"

php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证_php技巧

本文实例讲述了php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证的方法.分享给大家供大家参考,具体如下: 在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能.具体用法: Header("WWW-Authenticate: Basic realm="USER LOGIN""); Header("HTTP/1.0 401 Unauthorized"); 在页首设计这两个Hea