Php RuntimeException:无法创建缓存目录(/var/www/sonata/app/cache/dev)

Php RuntimeException:无法创建缓存目录(/var/www/sonata/app/cache/dev),php,symfony,logging,Php,Symfony,Logging,我安装了Sonata管理包。 安装后,我刷新页面时出现缓存问题,然后使用以下命令删除缓存: $ sudo rm -rf var/cache/* $ sudo rm -rf var/logs/* rm-rf应用程序/缓存应用程序/日志 然后我重新创建目录: mkdir应用程序/缓存应用程序/日志 但我得到了以下错误: 运行时异常:无法创建缓存目录(/var/www/sonata/app/cache/dev) 看起来像是文件/目录权限问题。该目录必须可由Web服务器写入。创建目录后,应使用调

我安装了Sonata管理包。
安装后,我刷新页面时出现缓存问题,然后使用以下命令删除缓存:

$ sudo rm -rf var/cache/*
$ sudo rm -rf var/logs/* 
rm-rf应用程序/缓存应用程序/日志
然后我重新创建目录:

mkdir应用程序/缓存应用程序/日志
但我得到了以下错误:

运行时异常:无法创建缓存目录(/var/www/sonata/app/cache/dev)


看起来像是文件/目录权限问题。该目录必须可由Web服务器写入。创建目录后,应使用调整权限

chown-R www-data:www-data-app/cache
www-R www-data:www-data-app/log
或对于Symfony 4+:

chown-R www-data:www-data-var
这只适用于linux系统。用户和组取决于您的发行版。在Debian和Ubuntu上,这应该是
www-data
,在CentOS上,这是afaik
apache

另一个解决方案是不删除整个文件夹,而是通过

$rm-rf-app/log/*app/cache/*

但请小心使用此命令。

对于centos:

chown -R apache:apache app/cache
如果您是来这里获取Symfony帮助的,那么如果您删除整个app/logs文件夹,您可能也必须这样做

chown -R apache:apache app/logs

更改CHMOD可能会有所帮助,但如果在开发过程中缓存使您烦恼,您可以停用它。 导航到应用程序配置文件(位于根目录的../app/config/config.yml中)。滚动至twig配置设置(twig:)并将缓存值(应指向缓存目录)更改为false,如下所示:

twig:
    cache:  false

如果没有看到任何缓存配置条目,只需在上面添加一行即可。

可能发生的情况是,您正在尝试在apache/nginx下创建文件。默认情况下,apache或nginx将umask设置为0022

发件人:

解释八进制umask模式022和002

如前所述,如果不更改默认设置,则将使用访问模式666创建文件,使用访问模式777创建目录。在本例中:

用于普通用户的默认umask 002。使用此掩码,默认目录权限为775,默认文件权限为664。 根用户的默认umask为022,默认目录权限为755,默认文件权限为644。 对于目录,基本权限为(rwxrwxrwx)0777,对于文件,基本权限为0666(rw)


您需要手动将umask设置为0002,并将其重置回以前的设置,然后才能创建目录。

我通过更改用户和文件夹组
var/cache
var/logs
解决了此问题,然后我清理了缓存:

sudo chown -R www-data:www-data var/logs
sudo chown -R www-data:www-data var/cache

sudo rm -rf var/logs/* var/cache/*

此解决方案是正确的:

但是否有必要更改
Symfony3
中的两个命令: 首先,您应该位于project的文件夹中:

$ sudo chown -R www-data:www-data var/cache
$ sudo chown -R www-data:www-data var/logs
删除缓存后:

$ sudo rm -rf var/cache/*
$ sudo rm -rf var/logs/* 

关于

mac计算机上,它将是:

$ sudo chown -R _www:_www var/cache
$ sudo chown -R _www:_www var/logs

如果上面的对您都不起作用,请在php文件上调用“phpinfo()”,并查找“User/Group”值。这是要授予权限的用户组。

我在使用PHP symfony作为错误图片时发现了类似的问题。 我在运行命令后找到了它

php bin/console cache:clear
我通过删除文件夹/app/var/cache


还要检查路径。就我而言,我有

返回目录名(uuu DIR_uuu)。'../../..//var/cache/

而不是


返回目录名(uuu DIR_uuu)。'/../../..//var/cache/
(缺少
/

这主要是权限问题

我已经用命令在MAC上解决了这个问题:
$sudo chmod-R 777


您可以尝试:
$sudo chmod-R 777/var/www/sonata/app/cache

进行概括,这样每个人都可以使用这两个命令来解决每个人的问题

sudo chown -R $USER var/cache
sudo chown -R $USER var/logs

进一步信息:
$USER
自动替换您的用户名,以便任何人都可以使用。

我在phpmyadmin 5.1.0中遇到此问题

解决方案是指定tmp目录的完整路径,而不是相对路径

在配置文件
config.inc.php
中,我有:

$cfg['TempDir'] = 'tmp'
我把它改成:

$cfg['TempDir'] = '/usr/share/phpmyadmin/tmp'
问题似乎与“匹配”某些允许的路径有关。
也许这个解决方案可以推广到其他使用twig的软件。

当然,一旦应用程序准备好投入生产,你需要重新激活它。我在Ubuntu服务器16.04上遇到了同样的问题,这样做
chown-R www data:www data var/logs var/cache var/sessions
解决了我的问题,别忘了清除缓存..它可以工作Broks:)谢谢,顺便问一下,你能解释一下什么是apache:apache吗?为什么不是当前用户?请小心
sudorm-rf/var/logs/*/var/cache/*
您正在删除根缓存!!删除斜杠bevor
var
感谢@Vural Acar的反馈。答案已编辑