2012-01-16 10 views
0

私は画像を表示する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時間の間にサーバーにまったく照会しないということです。それは可能ですか?

答えて

0

お客様が送信したIf-Modified-Sinceヘッダーを評価する必要があります。それ以来、ファイルが変更されていない場合は、304応答のみを送り返す必要があります。

301を実際のファイルにリダイレクトしてWebサーバーに処理させることで、コードを保存することができます。

+1

リダイレクトは、スクリプトが廃止されたために使用される可能性のあるあらゆる保護を行います。 'mod_xsendfile'を有効にしてから、' X-Sendfile'ヘッダを送信することでapacheがファイルのダウンロードを処理させる方が良いでしょう。 – ThiefMaster

+0

@主義、悪い提案ではありません。また、サーバー上のファイルへのランダムに生成されたリンクを作成し、それを使用して1日ほど後に削除することもできます。残念ながら、私たちはユーザーの要件が何であるか分かりません。 –

+0

このサービスは、アプリケーションにログインしていないファイルをユーザーから保護するために使用します。必要に応じて、このサービスはファイルのサムネイルも作成しました。 – Garith

0

私のために働いています。それはリフレッシュを強制するので、ちょうどF5をヒットしないでください。テストするには、アドレスバーをクリックしてEnterキーを押します。

構文解析If-Modified-Sinceは、実際のリフレッシュを行うと特別な利点があります。