Php Symfony'错误;s缓存和权限

Php Symfony'错误;s缓存和权限,php,symfony,caching,Php,Symfony,Caching,我在缓存中遇到了这个连续错误。有权限但我不知道发生了什么。在我的本地环境中,当我进入phpbin/console缓存时:clear-e=dev它会返回以下内容 [Symfony\Component\Filesystem\Exception\IOException] Failed to remove f

我在缓存中遇到了这个连续错误。有权限但我不知道发生了什么。在我的本地环境中,当我进入
phpbin/console缓存时:clear-e=dev
它会返回以下内容

  [Symfony\Component\Filesystem\Exception\IOException]                                                                                               
  Failed to remove file "/project/var/cache/de~/pools/ORsqbHaOKl/L/K/iZULk48B-k00dzIKC2qg": unlink(/project/var/cache/de~/pools/ORsqbHaOKl/L/K/iZULk48B-k00dzIKC2qg): Permission denied.    
因此,我需要先创建一个
chmod-r777var/
,然后再创建一个清除缓存,它就可以工作了。但当我运行网站时,它会返回给我

Failed to create "/project/var/cache/dev/tcpdf": mkdir(): Permission denied.
所以我需要再次制作
chmod-r777var/

在生产服务器中,如果不删除任何内容,有时会出现此错误

Warning: rename(C:\project\var\cache\prod/doctrine/orm/Proxies\__CG__AppBundleEntitySomeEntity.php.5a142ad84e8464.47105642,C:\project\var\cache\prod/doctrine/orm/Proxies\__CG__AppBundleEntitySomeEntity.php): Access is denied. (code: 5)
vendor\doctor\common\lib\doctor\common\Proxy\ProxyGenerator.php中出现错误 (第309行重命名())

本地环境:debian 9
生产环境:windows server 2008

我刚刚对它进行了一些研究,并注意到每次您打电话时

bin/console cache:clear --env=prod
文件夹
/prod
的用户将更改为执行调用的用户。脚本删除文件夹并创建一个新的文件夹,但这将由当前用户集完成

您可以使用
--no warmup
选项停止脚本创建新文件夹。这样,我就解决了我的问题

bin/console cache:clear --env=prod --no-warmup

为此,您需要一次性修复当前情况,最好是删除
/var/cache
目录中的所有文件夹和文件。

您需要按照symfony文章的建议设置var文件夹权限

在项目目录中运行以下命令,您将不会在缓存和日志上遇到任何与权限相关的问题

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

775够了!我认为这可能与文件的所有者有关,可能文件的username:group与webserver不同。我注意到,每次清除开发环境的缓存时,目录的“可全部写入”设置都将丢失。但尚未找到解决方案。@teeyo与权限无关。我以777为例。这是创建权限的bin/控制台的功能。有些文件夹是用我自己的用户名/组创建的,有些文件夹是用www-datahey创建的。谢谢你的回答,但这并不能解决我的问题:$php-bin/console-cache:clear--env=dev--no-warmup[RuntimeException]无法写入“/project/var/cache/dev”directory@BraianMellor你需要自己第一次修改你的许可,充其量只需删除
缓存
目录中的整个
/prod
/dev
文件夹。按照您的建议,我为var中的每个文件夹(缓存、日志、会话)创建了
chown-R www-data
sudo chgrp-R www-data
。然后运行websit并使php bin/console缓存:clear--env=dev--no warmup[UnexpectedValueException]流或文件“/project/var/logs/dev.log”无法打开:无法打开流:权限被拒绝。dev.log文件是www数据所有者。@BraianMellor检查
log
文件夹和文件的写入权限,很可能缺少写入权限。drwxr-xr-x用于日志文件夹,-rw-r--r--用于dev.log文件。你的建议是什么?我试过bu terminan不喜欢HTTPDUSER=$(ps axo用户,comm | grep-E'[a]pache |[h]ttpd |[u]www |[w]ww data |[n]ginx'| grep-v root | head-1 | cut d-d \-f1)好的。此命令只是试图获取apache/nginx用户。如果你没有改变的话,大部分都是“www数据”。您还可以在/etc/apache2/envvars中确认这一点。您将看到“export APACHE_RUN_USER=”。确认apache用户后,返回并运行其他两个命令。用你的apache用户名替换$HTTPDUSER。我想用这个答案来解决它,但我会编辑一些东西使它在我的情况下工作
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1)
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var