如何在CakePHP2中缓存静态内容(css,images,js文件)?

时间:2011-07-13 15:57:26

标签: php http cakephp caching cakephp-2.0

我需要设置一些HTTP标头“Expires”,“Cache-Control”, “Last-Modified”,资源为CSS文件,图像文件,js文件, 等(Webroot内容)。

我已经通过

读到了一些功能
   Configure::write('Asset.timestamp', true); // In core.php

和Helper类的assetTimestamp方法。

现在,问题是:它是如何使用的?

我读了HtmlHelper代码,在css方法中,第361行是这样的:

$url = $this->assetTimestamp($this->webroot($path));

1 个答案:

答案 0 :(得分:11)

解决。

首先,你必须考虑通过Apache实现它。您可以查看本指南: http://httpd.apache.org/docs/2.2/caching.html

问题是CakePHP有一个方法来做到这一点。非常好。

我将为CSS文件解释这个。当然也可以用于JS内容。

1)在你的core.php文件中(在app / config /下)取消注释这一行:

Configure::write('Asset.filter.css', 'css.php');

该行告诉CakePHP通过“css.php”脚本将所有请求路由到CSS文件。顾名思义,它是一个过滤器。在那里,我们可以做任何我们想做的事。

2)创建“css.php”文件。你必须在app / webroot /

下创建它

在那里,您可以获取browsen请求的文件并应用一些缓存HTTP标头。

类似的东西:

$filepath = CSS . $regs[1]; //There are some variables that are can be used in this script, take a look to de docs.

$output = file_get_contents($filepath);
header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT');
header("Content-Type: text/css");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + DAY) . " GMT"); //WEEK or MONTH are valid as well
header("Cache-Control: max-age=86400, must-revalidate"); // HTTP/1.1
header("Pragma: cache");        // HTTP/1.0
print $output;

就是这样!在那里,您的内容将与指定的标头一起提供,浏览器将知道可以缓存它们。

看看:

http://www.bunchacode.com/programming/get-cakephp-build-in-css-compression-to-work/

有一个很好的css.php版本,它也会使它变得微不足道。