致命错误:未捕获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
感谢您的回答,您提供的链接'is_writable'救了我:)我设法找出发生了什么事情。我最终将所有者和组php-fpm:nginx提供给整个目录,并解决了我所有的问题。 –