現在、Zend_Cache_Backend_Staticを使用してページを静的なHTMLファイルにキャッシュするアプリケーションを実行しています。不正なURLが要求されたときに、何百もの空のファイルとフォルダがキャッシュに入れられることを除けば、これは本当にうまく動作します。例外がスローされた場合にページがキャッシュされないようにする方法はありますか?私はこれが標準的な振る舞いではないことに驚きました。私は少し掘り、実際に静的なHTMLページを保存を扱うZFコードをやったZend_Cache_Backend_Staticを使用しているときのエラーページのキャッシュを防止する
は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として使用されるものです。
$this->_helper->cache->removePage($_SERVER['REQUEST_URI'], true);
それはうまく動作しますが、私は最初の場所でページを書くために希望されない:この行はのErrorControllerにerrorActionというの先頭に追加することができます!
ErrorControllerを押すまでに、静的ページはすでに書き込まれているので、これは効果がありません。 – baseten
その場合、 'routeShutdown()'で実行されるプラグインは、キャッシングを無効にするには早いほど早いでしょうが、その時点でページが404であることを知るべきです。 – drew010
良いアイデア。私はそれに行くだろう... – baseten