2011-07-13 143 views
5

我需要設置一些HTTP頭「過期」,「緩存控制」, 「最後修改」,資源爲CSS文件,圖像文件,js文件, 等(Webroot內容)。如何在CakePHP2中緩存靜態內容(css,images,js文件)?

我讀過,有一些功能,通過

Configure::write('Asset.timestamp', true); // In core.php 

和輔助類的assetTimestamp方法。

現在,問題是:它是如何使用的?

我讀的HtmlHelper代碼和CSS法,線361有這樣的:

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

對於貝克爾的谷歌搜索「爲以下資源指定至少一週到期」 – givanse

回答

11

解決。

首先你必須考慮通過Apache。你可以看看這個指南: http://httpd.apache.org/docs/2.2/caching.html

事情是CakePHP有一個方法來做到這一點。而且非常好。

我會解釋這個CSS文件。當然也可以用於JS內容。

1)在你core.php中的文件(在應用程序/配置/)取消註釋這一行:

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

該行通過「css.php」腳本說把CakePHP路由到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的一個很好的版本,也minfies它。

+2

我們可以用這個來做js和css。我們如何將過期標題添加到圖像? –