私は画像を表示するPHPサービスで作業します。私の問題は、ブラウザのキャッシュを適切に処理できないことです。phpのhttpヘッダーでのキャッシュの問題
これはコードです:
date_default_timezone_set('Europe/Brussel');
$expireTime = 7200;
header('Date: '.gmdate('D, d M Y H:i:s', time()).' GMT');
header('Expires: '.gmdate('D, d M Y H:i:s', time() + $expireTime).' GMT');
header('Cache-Control: max-age='. ($expireTime).', public'); // must-revalidate ?
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($path)).' GMT');
header('Content-Type: '.HelpersFile::getMIME($path));
header('Content-Length: ' . filesize($path));
header('Content-Disposition: inline;');
header('Pragma: public');
$fileRessource = fopen($path, 'rb');
fpassthru($fileRessource);
header('Connection: Close');
exit();
そして、この結果http://web-sniffer.net/で:
ステータス:HTTP/1.1 200 OK 日:月、2012年1月16日夜9時21分25秒GMT
サーバー:のApache/2.2.16(Debianの)
X-パワードバイ:PHP/5.3.3-7 + squeeze3
のSet-Cookie:PHPSESSID = 86m4rha4rvth4q8srrpg48t4t0。パス=/
有効期限:月、2012年1月16日午後11時21分25秒GMT
のCache-Control:最大エージング= 7200、公共
プラグマ:パブリック
最終-更新:日、2012年1月15日午後2時42分:39 GMT
コンテンツの長さ:223247
コンテンツの処理:インライン;私はクロームにファイルや他のブラウザをロードする場合、私は常に、 http://spinephp.info/service/MediaLibrary/mediaWithId/1.jpg: 接続:近い
のContent-Type:画像/ PNG
そしてfinaly、あなたはここでPHPのサービスを見ることができますサーバーから200 OK応答を取得し、ブラウザーはそのファイルからファイルをロードしません。
私は何が間違っているのか分かりません。 誰かが私の手がかりを持っていますか?
[編集] もっと正確に言えば、私が望むのは、クライアントブラウザーは2時間の間にサーバーにまったく照会しないということです。それは可能ですか?
リダイレクトは、スクリプトが廃止されたために使用される可能性のあるあらゆる保護を行います。 'mod_xsendfile'を有効にしてから、' X-Sendfile'ヘッダを送信することでapacheがファイルのダウンロードを処理させる方が良いでしょう。 – ThiefMaster
@主義、悪い提案ではありません。また、サーバー上のファイルへのランダムに生成されたリンクを作成し、それを使用して1日ほど後に削除することもできます。残念ながら、私たちはユーザーの要件が何であるか分かりません。 –
このサービスは、アプリケーションにログインしていないファイルをユーザーから保護するために使用します。必要に応じて、このサービスはファイルのサムネイルも作成しました。 – Garith