Понял, наконец,. Прошел много, много способов заставить эту работу ... наконец!
Cliffs: Zend Page Cache кэширует HEAD-запросы на страницу с тем же идентификатором кэша, что и запрос пользователя GET. Проблема в том, что запрос HEAD
всегда будет иметь пустой корпус ответа.
Я добавил некоторый код отладки сразу после $cache->start()
в моем Bootstrap.php, чтобы записать некоторые сведения о том, какие страницы были доступны, какой протокол, хост, код ответа, пользовательский агент и 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);
Я добавил это Zend_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"
Звучит как длинный рассказ! Трудно читать .. :) –
Это длинная история :(Я не совсем понимаю, как объяснить это, кроме кеша страницы, случайно создает пустой кеш и обслуживает его, так как сайт загружается абсолютно ничего и кэширует его – Benno