Zend Cache异常:'cache_dir“/home/(...)/application/../data/tmp/”不可写'

时间:2013-01-09 15:48:12

标签: php zend-framework

非常对Zend来说是新的,几天的使用。

我收到致命的错误消息:

Fatal error:  Uncaught exception 'Zend_Cache_Exception' with message 'cache_dir "/home/[REDACTED]/application/../data/tmp/" is not writable' in /home/[REDACTED]/library/Zend/Cache.php:209
Stack trace:
#0 /home/[REDACTED]/library/Zend/Cache/Backend/File.php(181): Zend_Cache::throwException('cache_dir "/hom...')
#1 /home/[REDACTED]/library/Zend/Cache/Backend/File.php(129): Zend_Cache_Backend_File->setCacheDir('/home/user/Proj...')
#2 /home/[REDACTED]/library/Zend/Cache.php(153): Zend_Cache_Backend_File->__construct(Array)
#3 /home/[REDACTED]/library/Zend/Cache.php(94): Zend_Cache::_makeBackend('File', Array, false, false)
#4 /home/[REDACTED]/application/Bootstrap.php(42): Zend_Cache::factory('Core', 'File', Array, Array)
#5 /home/[REDACTED]/library/Zend/Application/Bootstrap/BootstrapAbstract.php(669): Bootstrap->_initCache()
#6 /home/[REDACTED]/library/Zend/Applica in /home/[REDACTED]/library/Zend/Cache.php on line 209

根据错误消息,我预计tmp目录上会出现文件夹权限问题。但是,该目录是可写的:

user@[REDATCED]:~/[REDATCED]/data$ ls -hal
total 24K
drwxrwxr-x  6 user user 4,0K Jan  7 18:40 .
drwxr-xr-x 12 user user 4,0K Jan  9 12:50 ..
drwxrwxr-x  3 user user 4,0K Dez 17 11:42 locales
drwxrwxr-x  2 user user 4,0K Dez 17 11:42 logs
drwxrwxr-x  2 user user 4,0K Dez 17 11:42 sessions
drwxrwxr-x  2 user user 4,0K Jan  7 18:40 tmp

解决方法是在application/Bootstrap.php上评论以下几行:

    protected function _initCache() {
          $frontendOptions = array(
              'lifetime' => 7200, // cache lifetime of 2 hours
              'automatic_serialization' => true
          );

          $backendOptions = array(
              'cache_dir' => APPLICATION_PATH . '/../data/tmp/' // Directory where
          );

          // getting a Zend_Cache_Core object
          $this->cache = Zend_Cache::factory('Core', 'File',
            $frontendOptions, $backendOptions);

          Zend_Registry::set('cache', $this->cache);

          Zend_Date::setOptions(array(
              'cache' => $this->cache
          ));

这个解决方法是由同事建议的,我不知道我在这里做什么,或者即使这段代码是Zend或我们的代码库的一部分。我不喜欢丑陋的黑客行为,或者通过评论代码来“修复”东西,或者在不知道我在做什么的情况下做任何事情,或者背后的原因。

此外,代码似乎正在我的同事的机器上工作。每当我从存储库中提取代码时,我都会得到一个未注释的副本。

我可能会从存储库或类似的东西中排除该文件(我也是git的新手),但我真的更喜欢:

  • 了解错误原因
  • 了解解决方案

3 个答案:

答案 0 :(得分:5)

由于权限,通常会发生此错误。

要解决此问题,如果您使用apache作为Web服务器,请将所有权分配给apache。

在我的Fedora Core机器上,我通过简单地发出:

来解决这个问题
chown my_current_name:apache -R /var/www/project_name 

答案 1 :(得分:1)

当我写这个问题时,我注意到了我的错误,tmp目录可由我自己和同一组的其他用户写入,显然Zend将以另一个用户的身份访问这些文件。解决方案是在文件夹上chmod 777,使其可写。

答案 2 :(得分:1)

有同样的问题,通过一个简单的步骤解决了它。 LIB> Zend的>高速缓存>后端> File.php 找到这一行

protected $_options = array(
'cache_dir' => 'null',

删除引号并将其保留为

protected $_options = array(
'cache_dir' => null, 

这对我有用。