2011-07-13 14 views
5

CSSファイル、画像ファイル、jsファイル、 など(Webrootコンテンツ)などのリソースの場合、いくつかのHTTPヘッダ "Expires"、 "Cache-Control"、 "Last-Modified"を設定する必要があります。静的コンテンツ(css、画像、jsファイル)をCakePHP2にキャッシュする方法は?

私は

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

とヘルパークラスのassetTimestampメソッドを介して、いくつかの機能があることを読みました。

ここで、問題は:どのように使用されるのですか?

私はHtmlHelperのコードを読んで、CSS方式では、ライン361は、このあります:

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

ベーカーズの場合、「今後1週間以上の有効期限を指定してください」 – givanse

答えて

11

は解決しました。

まず、Apacheを使用して作成することを検討する必要があります。このガイドを見ることができます: http://httpd.apache.org/docs/2.2/caching.html

CakePHPにはこれを行う方法があります。そして、かなり良いです。

私はCSSファイルについてこれについて説明します。もちろんJSコンテンツにも使用できます。アプリの下であなたのcore.phpのファイルで

1)(/設定/)コメントを解除し、この行:

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

その行はその「css.php」スクリプトを使用してルーティングするためにCakePHPのにCSSファイルへのすべての要求を言います。名前が示すように、それはフィルタです。そこには、私たちが望むものを何でもすることができます。

2) "css.php"ファイルを作成します。 app/webroot/

で作成してください。ブラウザが要求しているファイルを取得して、いくつかのキャッシュ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; 

です!そこであなたのコンテンツは指定されたヘッダとともに提供され、ブラウザはそれらをキャッシュすることができることを知ります。また、それをminfies css.phpの良いバージョンがあります

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

は見てみましょう。

+2

これでjsとcssを行うことができます。イメージに期限切れヘッダーを追加するにはどうすればよいですか? –

関連する問題