终于想通了 经历了很多很多方法来让这个工作..终于!
Cliffs:Zend Page Cache 会将 HEAD 请求缓存到与用户 GET 请求具有相同缓存 id 的页面。问题是,HEAD
请求总是会有一个空的响应体。
我在 Bootstrap.php 之后添加了一些调试代码,$cache->start()
以记录有关正在访问的页面、协议、主机、响应代码、用户代理和 IP 的一些详细信息。
$start = $cache->start();
$start = $start === false ? 'false' : 'true';
$uri = $this->ns->https ? 'https://' : 'http://';
$uri = $uri . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$debug = date('Y-m-d H:i:s', time()) . "\t".$_SERVER['REMOTE_ADDR']."\t".$_SERVER['REQUEST_METHOD']."\tCache: $start\tUri: $uri";
$debug .= "\t " . http_response_code() . "\t";
$debug .= "\t " . $_SERVER['HTTP_USER_AGENT'];
file_put_contents(APPLICATION_PATH.'/logs/cachestartresult.log', $debug."\n", FILE_APPEND);
我将它添加到inZend_Cache_Frontend_Page
之前以表明它已缓存,但没有数据。die()
start()
$uri = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$debug = date('Y-m-d H:i:s', time()) . "\t".$_SERVER['REMOTE_ADDR']."\t".$_SERVER['REQUEST_METHOD']."\tCache: true (dieing".(empty($data) ? " - data is but cache exists":"").")\tUri: $uri";
$debug .= "\t " . http_response_code() . "\t";
file_put_contents(APPLICATION_PATH.'/logs/cachestartresult.log', $debug."\n", FILE_APPEND);
我ob_start()
在start()
函数中添加了这个:
$uri = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$debug = date('Y-m-d H:i:s', time()) . "\t".$_SERVER['REMOTE_ADDR']."\t".$_SERVER['REQUEST_METHOD']."\tCache: new cache\tUri: $uri";
$debug .= "\t " . http_response_code() . "\t";
file_put_contents(APPLICATION_PATH.'/logs/cachestartresult.log', $debug."\n", FILE_APPEND);
所以基本上我发现输出是:我加载了一个页面,它缓存得很好。如果我清除了缓存,并且在再次缓存之前执行了 HEAD 请求(例如,通过 Newrelic 或 pingdom 等),它会将页面缓存为空,并且在我清除缓存之前不会再次工作。
现在我唯一关心的是缓存是如何自动清空的。但是耶!我只通过启动缓存来阻止它$_SERVER['REQUEST_METHOD'] != "Head"