現在、Zend_Cache_Backend_Static を使用してページを静的な html ファイルにキャッシュするアプリを実行しています。これは非常にうまく機能しますが、間違った URL が要求されたときにキャッシュが何百もの空のファイルとフォルダーでいっぱいになることを除けば. 例外がスローされている場合にページがキャッシュされないようにする方法はありますか? これが標準的な動作ではないことを発見して驚きました。
少し掘り下げてみましたが、実際に静的 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;
}
私の他の唯一の考えは、 $data の長さをテストすることでした。 strlen($data) > 0 の場合にのみキャッシングが機能しているように見えますが、十分に堅牢ではないと感じています。
アップデート:
残念ながら、ErrorController に到達するまでに、静的ページは既にキャッシュに書き込まれているため、その時点でキャッシュを無効にしても機能しません。ただし、ページが最初に書き込まれたときに ID として使用される $_SERVER['REQUEST_URI'] に基づいてページを削除することは可能です。この行は、ErrorController の errorAction の先頭に追加できます。
$this->_helper->cache->removePage($_SERVER['REQUEST_URI'], true);
それはうまく機能しますが、そもそもページを書きたくないのです!