11

ドキュメントをホストおよびソートするための小さな PHP/MySQL 内部アプリを作成しました。ファイル (この場合は .PDF ファイル) を更新するまで、すべてが完全に機能します。ユーザーが .PDF を更新すると、期待どおり新しいファイルがサーバー上にあり、古いバージョンは削除されます。ユーザーは、古いバージョンを開いたことがなければ、新しいバージョンを取得しています。

問題は....ユーザーが過去のある時点で.PDFの古いバージョンを開いた場合、リンクをクリックしてドキュメントを表示しても、実際には物理的に新しいバージョンだけであっても、新しいバージョンを取得できません。サーバー上。

Google Chrome ブラウザが古いバージョンの PDF をどこかにキャッシュしていると推測しています。どうすればこれを回避できますか? ユーザーの数と 1 日の回数により、一部のドキュメントが更新され、手動でキャッシュをクリアするようユーザーに要求することは現実的ではありません。

4

3 に答える 3

23

ここでは、実際には 3 つの選択肢があります。

  1. 更新されるたびにファイル名を変更する
  2. 常に GET パラメータを使用して HREF を生成する
  3. サーバーから常に最新の状態でダウンロードするようにブラウザに指示するヘッダー情報を送信します

オプション 1 - 100% のケースで機能します。メンテが大変かも

echo '<a href="files/pdfs/'.$row['FILENAME_FROM_DATABASE'].'">PDF</a>';

// Could produce something like:
// <a href="files/pdfs/filename_v5.pdf">PDF</a>

オプション 2 - 99% のケースで機能する

echo '<a href="files/pdfs/filename.pdf?q='.microtime(true).'">PDF</a>';

オプション 3 - 99% のケースで機能する

header("Pragma: public");
header("Cache-Control: maxage=1"); // <-- important
header('Expires: '.gmdate('D, d M Y H:i:s', time()+1).' GMT');
header('Content-type: application/pdf');
exit(file_get_contents(PATH_TO_PDF_FILE));
于 2013-10-07T12:43:01.333 に答える