我想实现一个在请求的文件(图像)上生成缩略图的脚本。以下是了解脚本工作的简单操作列表:
- 向服务器请求
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