2011-11-08 71 views
2

美好的一天,Zend_Cache_Frontend_Page没有缓存(没有工作)

我遇到了Zend_Cache_Frontend_Page中的一些问题。我想使用Zend_Cache_Frontend_Page来缓存一些页面。但它不起作用。

protected function _initBookPageCaching() 
{ 
    Zend_Controller_Front::getInstance()->setParam('disableOutputBuffering',true);  
    // cache book pages 
    $frontendOptionsPages = array(
     'lifetime' => 2592000, 
     'debug_header' => true, // for debugging 
     'regexps' => array(
      // cache the whole IndexController 
      '^/$' => array('cache' => true), 
      '^/download-free-ebook/.*' => array('cache' => true) 
     ) 
    ); 

    $backendOptionsPages = array(
     'cache_dir' => APPLICATION_PATH.'/../cache' 
    ); 

    $cacheBookPages = Zend_Cache::factory(
         'Page', 
         'File', 
         $frontendOptionsPages, 
         $backendOptionsPages); 

    $cacheBookPages->start(); 
} 

我把上面的方法设置成Bootstrap.php文件。

请帮我解决这个问题。

感谢您的提前。

+0

它是否在缓存目录中创建文件?这将告诉我们缓存是否被首先创建,更不用说被使用了。 –

+0

不,它不会创建任何文件 – Mirodil

+0

好了,疑问,什么是APPLICATION_PATH设置为?试试'echo APPLICATION_PATH。 '/../cache';'并显示结果。 –

回答

2

我从来没有真正在我的引导使用在Zend_Controller_Front ::的getInstance(),而我用:

$this->bootstrap('frontController'); 

依次为:

$front = $this->getResource('frontController'); 

与您可以尝试:

$front->setParam('disableOutputBuffering', true); 

另外,我不确定可接受的正则表达式对于控制器是什么,什么不是。也许尝试更改'^/download-free-ebook/.*''^/download-free-ebook/'。并查看是否只是该控制器的索引操作至少缓存。

编辑: 我发现了这个问题。 $的cache>开始();正在返回false,所以我做了一些调试。你不是在传递一个缓存ID(如$cacheBookPages->start('some_cache_id');),所以Zend_Cache_Frontend_Page试图让一个给你上线261像这样:

// from Zend/Cache/Frontend/Page.php 
public function start($id = false, $doNotDie = false) 
{ 
    // .... 
    if (!$id) { 
     $id = $this->_makeId(); 
     if (!$id) { 
      return false; 
     } 
    } 
    // .... 
} 

因此,按照兔踪迹后,我意识到,这是试图建立一个基于以下数组的缓存ID:$ _GET,$ _POST,$ _SESSION,$ _COOKIE和$ _FILES。由于没有设置它们,因此无法创建缓存ID!并且由于它无法创建缓存ID,因此无法创建缓存文件。

解决方案:

$uri  = explode('/', $_SERVER['REQUEST_URI']); 
$cacheKey = array(); 
foreach ($uri as $key) { 
    if (empty($key)) { 
     continue 1; 
    } 
    $cacheKey[] = $key; 
} 

$cacheBookPages->start('page_cache_' . implode('_', $cacheKey)); 
+0

我检查了这个改变,但没有帮助。网址是“/ download-free-ebook/landscape-ecology”,这个正则表达式“^/download-free-ebook /.*”是有效的。 – Mirodil

+0

阅读我的编辑。我试过这个非常相同的代码,它工作! –

0

是的,正则表达式可能是错误的,特别是削减可能会导致问题。尝试通过puting \逃脱它每次削减之前,如果这个不行,尽量把一切都放在斜线,如: “/^/download-free-ebook/.*/”

+0

URL是“/ download-free-ebook/landscape-ecology”,这个正则表达式是“^/download-free-ebook /.*”。 – Mirodil

2

设置的application.ini

resources.frontController.params.disableOutputBuffering = true 

一套引导或行动

$frontendOptions = array(
     'lifetime' => 900, 
     'automatic_serialization' => true, 
     'default_options' => array(
      'cache_with_get_variables' => true, 
      'cache_with_post_variables' => true, 
      'cache_with_session_variables' => true, 
      'cache_with_files_variables' => true, 
      'cache_with_cookie_variables' => true, 
      'make_id_with_get_variables' => true, 
      'make_id_with_post_variables' => true, 
      'make_id_with_session_variables' => true, 
      'make_id_with_files_variables' => true, 
      'make_id_with_cookie_variables' => true, 
      'cache'=>true 
     ), 


    ); 

    $backendOptions = array(
     'cache_dir' => APPLICATION_PATH . '/servercache/' 
    ); 
    $cache = Zend_Cache::factory('Page', 'File', $frontendOptions, $backendOptions); 
    $cache->start(); 

在这里,我们去!!!!!!!!!!!!!!!!!!