1

Linux でローカル LAMP スタックを実行しています。私は通常のApache/PHP/mySQLのものを持っています.localhostからはすべて正常に動作します.

サーバー上にツリー ビューを表示する小さなアプリがあります。これは、ローカル (サーバー上) で見つかった一連のドキュメントを一覧表示します。これらのファイルは、ツリーでクリックして表示できます。この時点で、ファイルはページの DIV にロードされます。これらのファイルは、アプリケーション内で作成した簡単なエディターを使用して編集できます。これはこれまでのところうまくいきます。

問題は、PHP (私が推測) がこれらのドキュメントをロード時にキャッシュしていることです。つまり、ユーザーがドキュメントを編集すると、ドキュメントは保存されますが、ツリーで再選択すると、キャッシュされたバージョンが表示され、新しく作成されたドキュメントは表示されません。編集版。

アプリの最初のページは標準の HTML ページでしたが、名前を PHP に変更し、このページの上部に次のコードを追加しました。

<?php
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

残念ながら、これはメイン ページのキャッシュを妨げているように見えますが、アプリケーションの一般的な使用中に動的にロードされるファイルは妨げられません。

これらの動的にロードされたローカル ファイルを PHP (まだ PHP であると想定) がキャッシュしないようにする方法はありますか?

4

1 に答える 1

3

オペコードキャッシュとブラウザキャッシュを混同しています。設定しているヘッダーは PHP とは関係ありません。ブラウザーのキャッシュに影響を与える http ヘッダーです。PHP は (APC などで適切にセットアップされている場合) オペコードをキャッシュしますが、これは問題とは関係ありません。

クライアント (ブラウザ) がファイルをキャッシュしないようにするには、ファイルをクライアントにダウンロードして編集するときに、ファイルにキャッシュ ヘッダーを設定する必要があります。

すべてのダウンロード (css ファイル、js ファイル、その他のファイル) は個別の http 要求であるため、独自のヘッダーが設定されています。そのため、リクエストごとのカスタム ヘッダーを設定する場合は、そのようなリクエストごとに設定する必要があります。あなたの場合、より簡単な解決策は、これらのヘッダーを Apache 構成のレベルに追加することです。

ApacheHeaderディレクティブは使いやすく、Apache 構成チェーンのほぼどこでも使用できます。つまり、.htacess、vhost 構成、または一般的な apache 構成です。これをどのように解決するかは、あなたとあなたのサーバー環境次第です。

.htaccess にヘッダーを追加する方法の例は次のとおりです。

Header set Cache-control "max-age=0, no-store"

または、特定のファイル タイプに対してのみ特定のヘッダーを設定する場合は、次のようにします。

<FilesMatch "\.(gif)$" >
    Header set Cache-control "max-age=0, no-store"
</FilesMatch>
于 2013-01-17T19:11:12.433 に答える