我们目前正在运行一个应用程序,它使用Zend_Cache_Backend_Static将页面缓存到静态html文件。这工作得很好,除了当请求不正确的URL时,我们的缓存中充满了数百个空文件和文件夹。如果抛出异常,有什么办法可以防止页面被缓存?我很惊讶地发现这不是标准行为。使用Zend_Cache_Backend_Static防止错误页面缓存
我做了一个小挖和实际上拯救了静态的HTML页面交易的ZF代码为Zend_Cache_Frontend_Capture如下:
public function _flush($data) {
$id = array_pop($this->_idStack);
if ($id === null) {
Zend_Cache::throwException('use of _flush() without a start()');
}
if ($this->_extension) {
$this->save(serialize(array($data, $this->_extension)), $id, $this->_tags);
} else {
$this->save($data, $id, $this->_tags);
}
return $data;
}
此功能对于ob_start的output_callback。我尝试了解响应对象来测试状态,但它似乎并没有在_flush内部工作。
$response = Zend_Controller_Front::getInstance()->getResponse();
if($response->getStatus() == '200') {
// do the save as normal
}
else {
// do nothing
return false;
}
我唯一想到其他是测试的$长度数据,只有当strlen的($数据)缓存> 0似乎工作,但感觉并不足够强大。
更新:
不幸被我们打的ErrorController静态页面已经被写入到缓存中,因此,禁用该点的缓存将无法正常工作的时间。但是,可以根据$ _SERVER ['REQUEST_URI']删除页面,这是在第一次写入页面时用作ID的页面。这条线可以添加到errorAction开始在ErrorController:
$this->_helper->cache->removePage($_SERVER['REQUEST_URI'], true);
它工作得很好,但我不希望写入页摆在首位!
当我们点击ErrorController时,静态页面已经被写入,所以这没有效果。 – baseten 2012-04-20 09:51:48
在这种情况下,运行'routeShutdown()'的插件可能会足够早以禁用高速缓存,但当时您应该知道该页面是404。 – drew010 2012-04-20 17:13:23
好主意。我会给它一个去... – baseten 2012-04-23 14:57:01