要求されたファイル (画像) のサムネイルを生成するスクリプトを実装したいと考えています。スクリプトの動作を理解するためのアクションの簡単なリストを次に示します。
- サーバーへのリクエスト
url/preset/filename.jpg
- ファイルが既にサム化されているかどうかを確認する
- そうでない場合は、新しいファイルを生成してそのファイルを返します。存在する場合は、サム ファイルを返します。
これは完璧に機能しますが、問題は画像がブラウザによってキャッシュされないことです. 私はキャッシングにあまり詳しくありません。304 Not modified
戻るとブラウザがキャッシュから画像を取得するようになると思いましたが、保留状態でハングします。
誰かがこれらの画像をキャッシュする方法を知っていますか?
これは私のスクリプトのショー部分です:
private function _show_image($file_path, $filename, $new = FALSE) {
$this->load->helper('file');
if($new) {
header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
} else {
//header('HTTP/1.1 304 Not Modified');
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
}
header('Cache-Control: public'); // needed for i.e.
header('Content-type: ' . get_mime_by_extension($file_path));
header('Content-Transfer-Encoding: Binary');
header('Content-Length:' . filesize($file_path));
//header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Disposition: inline; filename=' . $filename);
readfile($file_path);
exit();
}
アップデート
コードを更新して、 が設定されているかどうかを最初にチェックし、$_SERVER['HTTP_IF_MODIFIED_SINCE']
設定されている場合はすべてのチェックを行います。しかし、問題は、ブラウザがそのヘッダーを送信していないということです..
ファイルにアクセスしたときの送信ヘッダーと受信ヘッダーは次のとおりです。
リクエスト
Accept:*/*
Accept-Encoding:identity;q=1, *;q=0
Accept-Language:nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Cookie:PHPSESSID=heiog0hdasg181l45cfbm7u353; __jwpusr=264f6c61-3752-4682-a61b-e02b822c7815
Host:domain.local
Range:bytes=0-
Referer:http://domain.local/test
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
応答
Cache-Control:public
Connection:Keep-Alive
Content-Description:File Transfer
Content-disposition:inline
Content-Length:24103476
Content-Transfer-Encoding:binary
Content-Type:video/mp4
Date:Thu, 30 May 2013 14:07:02 GMT
Expires:0
Keep-Alive:timeout=5, max=98
Last-Modified:Wed, 29 May 2013 09:03:30 GMT
Server:Apache/2.2.22 (Win32) PHP/5.3.13
X-Frame-Options:SAMEORIGIN
X-Powered-By:PHP/5.3.13
X-XSS-Protection:1; mode=block