【发布时间】:2011-01-24 10:15:43
【问题描述】:
我使用简单的 PHP 代码(zend 框架)即时调整 jpg 图像的大小。
问题是我总是以 HTTP 200 状态结束,而不是 304 并允许浏览器缓存图像。
我无法获取 apache 标头,function_exists('apache_request_headers') 是假的,并且在服务器变量中我只有
'HTTP_ACCEPT' => 'image/png,image/*;q=0.8,*/*;q=0.5',
'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'HTTP_ACCEPT_ENCODING' => 'gzip,deflate',
'HTTP_ACCEPT_LANGUAGE' => 'en-us,en;q=0.5',
'HTTP_CACHE_CONTROL' => 'max-age=0',
'HTTP_CONNECTION' => 'keep-alive',
'HTTP_COOKIE' => '***',
'HTTP_HOST' => 'automobi.li',
'HTTP_KEEP_ALIVE' => '300',
'HTTP_REFERER' => 'http://automobi.li/oglas/Opel+Astra/2',
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 FirePHP/0.4',
我正在发送
$lastModified = filemtime($path);
$etag = md5_file($path);
$this->getResponse()->setHeader('Content-type', 'image/jpeg');
$this->getResponse()->setHeader('Cache-Control', 'public');
$this->getResponse()->setHeader('Last-Modified', gmdate('D, d M Y H:i:s', $lastModified) . ' GMT');
$this->getResponse()->setHeader('Cache-Control', 'max-age=86400, must-revalidate');
$this->getResponse()->setHeader('Expires', gmdate('D, d M Y H:i:s', time() + 86400 ) . ' GMT');
$this->getResponse()->setHeader('ETag', $etag);
我希望 HTTP_IF_MODIFIED_SINCE 或类似的服务器变量,所以我可以这样做
if ($this->getRequest()->getHeader('IF_MODIFIED_SINCE') == $lastModified) {
$this->getResponse()->setHttpResponseCode(304);
} else {
$w = (int) $this->_getParam('w');
$h = (int) $this->_getParam('h');
$image->resize($path, $w, $h);
}
有什么想法吗?
【问题讨论】: