PHP缓存控制的概念

时间:2014-07-26 04:31:33

标签: php caching

我已阅读有关PHP缓存控制的文章。

他们讲述了概念和编码,但我仍然无法理解:

在哪里放这些代码?把它放在所有页面?在我的PHP文件的最开始? 我想知道浏览器会缓存整个HTML代码吗?

我看到很多关于Cache正在使用图像文件,css文件的例子。但是,如果我想在图像文件上添加标题,是否意味着我需要重写url以将图像文件请求引导到php文件中?

1 个答案:

答案 0 :(得分:3)

我假设你的意思是关于浏览器缓存的缓存。如果是这样,您需要知道的是浏览器会跟踪您下载的每个文件。一旦您第二次访问某个页面,您的浏览器会首先检查您尝试下载的文件(即图像或CSS文件)是否已在您的计算机上,并且尚未在网站上进行过编辑第一次和第二次访问。

如果要实现浏览器缓存,可以使用一些HTTP标头来控制用户的浏览器如何执行给定文件的验证和缓存。你可以使用这样的东西:

header("Expires: Mon, 1 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache"); 

这将强制浏览器不缓存文件。我正在展示您所获得的相反版本,以了解为什么浏览器在给定具有特定标头的文件时的行为。第一行将通过设置较旧的日期告诉浏览器您当前访问的文件已经过期。如果您将来将日期更改为1,您将获得相反的功能。

接下来,第二行允许脚本告诉浏览器上次编辑用户尝试访问的文件的时间。如果您在网络上的文件中的最后修改日期早于您计算机上的文件(来自您第一次访问时下载的文件),则您的浏览器将再次下载该文件,假设自上次访问后该文件已更改。 / p>

第三行有助于解释一些浏览器(以及某些代理)在下载文件时的行为方式。这里有不同的选项,你可以看到所有这些选项here

最后一个类似于前一个,但对于旧系统。 Here's a proper explanation

否则,还有另一种选择,但与PHP没有任何关系:您可以配置您的服务器应用程序来为您处理缓存控制标头(如果您使用PHP我假设Apache或Nginx)所以你不要我需要重写所有内容或将其传递给PHP文件。

如果你正在使用Apache,你可以在.htaccess文件中使用这样的东西:

# 480 weeks 
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
Header set Cache-Control "max-age=290304000, public" 
</FilesMatch>   

或者,如果您使用的是Nginx,则在处理您网站的配置部分中,您可以添加:

location ~* \.(css|js|gif|jpe?g|png)$ { 
expires 168h; 
add_header Pragma public; 
add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
}