我不得不使用
app/console cache:clear command
在生成实体时解决问题。
我现在无法加载我的主页:
http://localhost/projet_etienne/web/app_dev.php
它说:
RuntimeException:无法写入缓存文件“/var/www/projet_etienne/app/cache/dev/classes.php”。
我对这个缓存业务了解不多!
在我的app/cache
文件夹中,我有一个dev
,一个dev_new
,一个dev_old
文件夹。这是正常的吗?
app/console cache:clear
以a:
的方式生成[ErrorException] 警告:重命名(/ var / www / projet_etienne / app / cache / dev,/ var / www / projet_etien
ne / app / cache / dev_old):/ var / www / projet_etienne / vendo中的目录不为空 R / symfony中/ symfony中/ src目录/ Symfony的/包/ FrameworkBundle /命令/ CacheClearComm
and.php第77行
请帮忙!
答案 0 :(得分:92)
对于GOOD和明确的解决方案,请参阅Setting up Permissions
部分中的Installing and Configuring Symfony
部分:
设置权限
安装Symfony时的一个常见问题是app / cache和 app / logs目录必须可由Web服务器和 命令行用户。在UNIX系统上,如果您的Web服务器用户是 与命令行用户不同,您可以尝试其中一个 以下解决方案。
- 对CLI和Web服务器使用相同的用户
醇>在开发环境中,通常的做法是使用相同的方法 CLI和Web服务器的UNIX用户,因为它避免了任何 设置新项目时会出现这些权限问题。这可以 通过编辑您的Web服务器配置来完成(例如,通常 用于Apache的httpd.conf或apache2.conf并将其用户设置为 与CLI用户相同(例如,对于Apache,更新用户和组 值)。
- 在支持chmod + a
的系统上使用ACL 醇>许多系统允许您使用chmod + a命令。先试一下, 如果您收到错误 - 请尝试下一个方法。这使用命令 尝试确定您的Web服务器用户并将其设置为HTTPDUSER:
$ rm -rf app/cache/* $ rm -rf app/logs/* $ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` $ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
- 在不支持chmod + a
的系统上使用ACL 醇>某些系统不支持chmod + a,但支持其他实用程序 叫做setfacl。您可能需要在分区上启用ACL支持 并在使用之前安装setfacl(与Ubuntu一样)。这个 使用命令尝试确定您的Web服务器用户并将其设置为 HTTPDUSER:
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
对于Symfony 3,它将是:
$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1` $ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs
如果这样 不起作用,尝试添加-n选项。
- 不使用ACL
醇>如果以上方法都不适合您,请更改umask 缓存和日志目录将是可写组或全局可写的 (取决于Web服务器用户和命令行用户是否在 同一组与否)。为此,请将以下行放在 app / console,web / app.php和web / app_dev.php文件的开头:
umask(0002); // This will let the permissions be 0775 // or umask(0000); // This will let the permissions be 0777
请注意,当您在服务器上访问ACL时,建议使用ACL 因为更改umask不是线程安全的。
来源: Failed to write cache file "/var/www/myapp/app/cache/dev/classes.php" when clearing the cache
答案 1 :(得分:22)
很可能意味着目录和/或子目录不可写。许多人忘记了子目录。
Symfony 2
chmod -R 777 app/cache app/logs
Symfony 3目录结构
chmod -R 777 var/cache var/logs
Permissions solution by Symfony(之前提到过)。
Permissions solution by KPN University - 另外还包括安装时的屏幕播放。
注意:如果您正在使用Symfony 3目录结构,请将app/cache
和app/logs
替换为var/cache
和var/logs
。
答案 2 :(得分:17)
如果文件夹已经可写,那就不是问题了。
您也可以导航到/www/projet_etienne/app/cache/
并手动删除其中的文件夹(dev,dev_new,dev_old)。
如果这不能解决问题,请务必在某个地方保存这些文件夹的副本
我知道这不是它应该做的方式,但现在它对我有用了几次。
答案 3 :(得分:11)
您可能已中途清除了一个clearcache,现在您已经拥有了app / cache / dev_old。
尝试这个(在项目的根目录中,假设您使用的是OS X或Linux等Unixy环境):
rm -rf app/cache/dev*
答案 4 :(得分:8)
也许您忘了更改app / cache app / log
的权限我正在使用Ubuntu
sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
sudo setfacl -dR -m u::rwX app/cache app/logs
希望有所帮助......
答案 5 :(得分:1)
我将整个目录从我的Windows安装移动到unix生产服务器,我得到了同样的错误。为了解决这个问题,我只是在unix中运行了这两行,一切都运行良好
rm -rf app/cache/*
rm -rf app/logs/*
答案 6 :(得分:1)
我执行了:
ps aux | grep apache
得到类似的东西:
root 28147 0.0 5.4 326336 27024 ? Ss 20:06 0:00 /usr/sbin/apache2 -k start
www-data 28150 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start
www-data 28151 0.0 4.4 329016 22124 ? S 20:06 0:00 /usr/sbin/apache2 -k start
www-data 28152 0.1 6.0 331252 30092 ? S 20:06 0:00 /usr/sbin/apache2 -k start
www-data 28153 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start
www-data 28154 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start
www-data 28157 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start
user 28297 0.0 0.1 15736 924 pts/4 S+ 20:12 0:00 grep --color=auto apache
所以我没有访问权限的用户被证明是www-data
因此我执行了命令:
sudo chown -R www-data app/cache
sudo chown -R www-data app/logs
它解决了访问错误。
永远不要使用不安全的777来解决特定的访问问题:
sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
答案 7 :(得分:0)
如果symfony版本小于2.8
.text1 :
{
*\libc.a:*(.text .text.*) // libc.a.text still resides in rom
*\libc.a:*(.rodata .rodata.*) // libc.a.rodata still resides in rom
} > rom1
.data1 :
{
*\libc.a:*(.data .data.*) // libc.a.data still resides in ram
} > ram1 AT > rom1
.bss1 (NOLOAD) :
{
*\libc.a:*(.bss .bss.*) // libc.a.bss still resides in ram
} > ram1

如果symfony版本大于或等于3.0
sudo chmod -R 777 app/cache/*

答案 8 :(得分:0)
仅使用此acl cmd,下次在var中创建文件时,它将对www-data用户具有r / w / x权限。
cd var
rm -rf *
cd ..
setfacl -d -m u:www-data:rwx var
Cmd说明:
setfacl -> Set acl command
-d -> default behavior
-m -> modify
u:www-data: -> for user
rwx -> adding permissions
var -> on the folder
答案 9 :(得分:0)
如果在使用docker(我的Symfony版本5.1)启动Symfony项目时遇到此错误。或类似这样的错误:
未捕获的异常:读取上游时无法写入文件“ /var/www/html/mysite.com.local/var/cache/dev/App_KernelDevDebugContainer.xml”
未捕获的警告:file_put_contents(/var/www/html/mysite.com.local/var/cache/dev/App_KernelDevDebugContainerDeprecations.log):无法打开流:读取上游时权限被拒绝
下面的修复帮助了我。
在nginx容器的Dockerfile中添加行:
RUN usermod -u 1000 www-data
在用于php-fpm容器的Dockerfile中添加行:
RUN usermod -u 1000 www-data
然后删除目录“ / var / cache”,“ / var / log”中的所有内容并重建docker的容器。