« ディスクレスサーバーに | メイン | php+スマーティ開発に必須本! »

Tips

WEB上の画像が更新されない

 サーバー上の画像ファイルを変更してもブラウザでは最新の画像ファイルに切り替わらない現象。
 これはブラウザの実装によるもので、同じファイル名の画像だとローカルキャッシュが表示され続けてしまうため。

 header("Cache-Control: no-cache, must-revalidate");

 header("Cache-Control: private");
などをHTMLドキュメントのレスポンスヘッダーに出力する例が見つけられるが、画像のリクエストに対するレスポンスに出力する必要がある。

 <img src=imag.jpg?2008010123596099>
smartyなら
 <img src=imag.jpg?{$smarty.now}>
のように?に続けて変化する文字列を付加することで、ブラウザは異なるリクエストと解釈するので効果がある。ただし、MSではパフォーマンス低下を理由に推奨していないとおり、これでは同じ画像にもかかわらずキャッシングされなくなる(http://support.microsoft.com/kb/246960/ja)。

 本来の目的通り、そのファイルの最終更新時刻を付加すればよい。smartyなら
 <img src=imag.jpg?{$nameFileImage|filemtime}>
これでファイルの更新タイムスタンプでユニークになり負荷を抑えられる(ファイルが必ず存在するものとする)。

トラックバック

このエントリーのトラックバックURL:
http://www.remix.asia/cgi/mt/mt-tb.cgi/6490

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)