致命错误:未捕获Zend_Cache_Exception:cache_dir的 “......在/ var/page_cache” 是不是写在.../zendframework1 /图书馆/ Zend公司/ Cache.php上线209

问题描述:

我有以下配置:致命错误:未捕获Zend_Cache_Exception:cache_dir的 “......在/ var/page_cache” 是不是写在.../zendframework1 /图书馆/ Zend公司/ Cache.php上线209

的CentOS使用mysql 5.7和php 7.0.10的VM x64

至于我的web服务器,我使用nginx和php-fpm。

从git仓库所以我安装的Magento,分支2.1,和我不断收到此错误:

Fatal error: Uncaught Zend_Cache_Exception: cache_dir "/usr/share/nginx/html/var/page_cache" is not writable in /usr/share/nginx/html/vendor/magento/zendframework1/library/Zend/Cache.php on line 209 

我试图从nginx的改变Magento的/目录的所有者递归到PHP- fpm,然后我尝试给page_cache目录提供权限,但似乎没有发生,无论我尝试什么,都会出现同样的错误。

我看到这个错误的唯一原因是因为我在主索引文件中添加了语法ini_set('display_errors', 1);,否则我会看到一个银行页面。将magento更改为开发者模式并没有在页面上显示任何错误,也没有做任何事情来显示我正面临的错误,也将文件local.xml.sample重命名为local.xml。

我会从缓存目录及其父目录上的ls -lh开始,以确保您对所做的每件事都拥有777权限。

如果做不到这一点 - 在Zend异常,你看到这里发源:

# File: vendor/magento/zendframework1/library/Zend/Cache/Backend/File.php 
public function setCacheDir($value, $trailingSeparator = true) 
{ 
    if (!is_dir($value)) { 
     Zend_Cache::throwException(sprintf('cache_dir "%s" must be a directory', $value)); 
    } 
    if (!is_writable($value)) { 
     Zend_Cache::throwException(sprintf('cache_dir "%s" is not writable', $value)); 
    } 
    if ($trailingSeparator) { 
     // add a trailing DIRECTORY_SEPARATOR if necessary 
     $value = rtrim(realpath($value), '\\/') . DIRECTORY_SEPARATOR; 
    } 
    $this->_options['cache_dir'] = $value; 
} 

所以,无论出于何种原因,当通过了缓存目录PHP的is_writable函数返回false。结帐的is_writable's PHP manual entry并通过评论那里可能的边缘情况。从第一条评论的一个可能性

To Darek and F Dot: About group permissions, there is 
this note in the php.ini file: 

; By default, Safe Mode does a UID compare check when 
; opening files. If you want to relax this to a GID compare, 
; then turn on safe_mode_gid. 
safe_mode_gid = Off
+0

感谢您的回答,您提供的链接'is_writable'救了我:)我设法找出发生了什么事情。我最终将所有者和组php-fpm:nginx提供给整个目录,并解决了我所有的问题。 –