현재 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