1

つまりね。やや圧縮された CSS コンテンツを提供しています

(`str_replace(array("\r", "\n", "\t", '\s\s+'), '', cssGoesHere)`) 

私のページのPHPファイルを介して:

<link rel="stylesheet" type="text/css" href="/css/loader.css.php" />

問題は、返された css をブラウザーにキャッシュさせる方法ですが、コンテンツが変更された場合にキャッシュを更新するにはどうすればよいですか?

PHPファイルは変更されていないため、次のようなものを追加します

<?php echo filemtime('/css/loader.css.php'); ?>

属性へのhref追加はオプションではありません。これはヘッダーで解決できますか?もしそうなら、どのように? 私の知る限り、上記のように提供すると、ブラウザーは結果をキャッシュしてキャッシュを再利用し続けます (もちろん、ブラウザーが有効になっている/できる場合)、コンテンツがいつ処理されるかを知る必要がありますかわった。

編集: コードを使用して github プロジェクトを作成しました (これを書いてから、柔軟性を高めるために多くの変更を加えました)。リンクは次のとおりです: https://github.com/jurchiks/YACC
何か提案があれば、私の電子メールまたはメールに書いてください。

4

5 に答える 5

1

変更時にファイルを確実にロードする唯一の方法は、指定した方法です。それ以外の場合、ページはファイルをキャッシュし、必要と思われる限りファイルを保持します。少なくともヘッダーを要求してダウンロードしない限り、ページが変更されたかどうかを確認することはできません。帯域幅が最小になるため、ページの残りの部分をダウンロードするだけでもかまいません。

変更日をHTMLに追加できない場合の最善の方法は、PHPを介してキャッシュヘッダーを設定することです。

header("Cache-Control: max-age=time-in-seconds");

ただし、特にInternet Explorerなどの積極的なキャッシュブラウザでは、サーバー設定とブラウザ設定がこれを上書きする可能性があるため、これは常に機能するとは限りません。

于 2012-06-22T11:38:16.007 に答える
1

これはヘッダーのキャッシュ制御によって解決できますが、これはあまり効果的ではないことが証明されています。一部のブラウザは強制設定を上書きまたは変更するためです。

CSSデータをどこから取得しているかわかりません。CSSファイルの場合、バージョンインジケーターとしてcssファイルのfilemtimeを取得するか、CSSファイルが変更されるたびに変更する必要があるバージョン文字列をどこかに指定することができます。

ちなみにstr_replace(array("\r", "\n", "\t", '\s\s+')、、はすべての改行を効果的に削除するわけではありません。あなたは次のようなものを使うべきです

$foo = nl2br($string, FALSE);
$bar = str_replace(array('<br>', '\s\s+'), '', cssGoesHere)

代わりは。

HTH :)

于 2012-06-22T11:36:05.277 に答える
1

これをcssphpページで使用します。

header('Content-type: text/css');
header("Cache-Control: no-cache, must-revalidate");

ヘッダーの詳細については、PHPの公式ドキュメントをご覧ください。

于 2012-06-22T11:39:58.457 に答える
1

バージョン番号を CSS リンクの href に追加し、mod rewrite を使用して元の CSS ファイルに戻すことができます。

例えば。バージョン 1 から始めるとします (ファイル名のバージョンの付録に注意してください)。

<link rel="stylesheet" type="text/css" href="/css/loader-v001.css.php" />

ブラウザはこのファイルをキャッシュします。次回 CSS ファイルを更新するときに、ブラウザーでキャッシュ ファイルを使用したくない場合は、次のようにバージョン番号を変更するだけです。

<link rel="stylesheet" type="text/css" href="/css/loader-v002.css.php" />

次に、mod の書き換えで、ファイルに対するすべての要求を にルーティングしloader-v{x}.css.phpますloader.css.php

バージョン番号を手動で変更する必要があるため、これがニーズに十分「自動化」されているかどうかはわかりません。ただし、別のファイル名により、ブラウザはそれを実際の「新しい」ファイルとして認識し、再ダウンロードします。

于 2012-06-22T13:21:56.310 に答える
0

キャッシュコンテンツが生成された時間をどこかに保持することをお勧めします。たとえば、CSSデータを保持するstyle.phpは2012年6月21日に最後に変更され、キャッシュコンテンツは2012年6月20日に最後に生成されました。 strtotime()整数では、キャッシュされたコンテンツを新しいコンテンツから再度生成する必要があることがわかります。

于 2012-06-22T11:39:28.423 に答える