有关良好且明确的解决方案,请参阅第 1Setting 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 不是线程安全的。
http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup
来源:
清除缓存时无法写入缓存文件“/var/www/myapp/app/cache/dev/classes.php”