支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
一个常见问题是当安装Symfony时,var
目录必须能同时被web服务器和命令行用户执行写入操作。在UNIX系统上,如果web server用户并非拥有文件权限的命令行用户,你可以尝试下列解决办法:
在开发环境下,使用同一个服务器用户和命令行用户,是常规实践,因为这可以避免设置新项目时的权限问题。编辑服务器配置文件(通常是httpd.conf或apache2.conf,对于Apache来说),将用户设置为你的CLI用户(更新User
和Group
的值)。
如果处于生产环境下,确保用户只能拥有受限制的权限(不能访问私有数据或服务器,也不能启动不安全的二进制文件,等等),一个免疫低下的服务器常常把这些权限送给黑客。
MacOS X允许使用chmod +a
命令,通过命令来确定你的服务器用户并将其设为HTTPDUSER
:
1 2 3 4 5 | $ rm -rf var/cache/* var/logs/* var/sessions/*
$ 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 chmod -R +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" var
$ sudo chmod -R +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" var |
多数linux和bsd的分发并不支持chmod +a
,但是支持另一个工具叫setfacl
。你可以在分区上开启ACL支持,然后在使用之前安装setfacl。它用一个命令来确定你的web server用户并将其设置为HTTPDUSER
:
1 2 3 | $ 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 -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var |
如果不成功,尝试添加-n
选项。
setfacl不适合用于NFS映像系统上。因此出于性能考虑,强烈不推荐在NFS上设置cache和log。
若前述方法都不适合你的话,改变umask设置以便cache和log目录能够成为“群组可写(group-writable)”或“全局可写(world-writable)”(根据服务器用户和命令行用户是否处于同一群组而定)。为了实现这个,把下面命令行添加到bin/console
,web/app.php
以及web/app_dev.php
中:
1 2 3 4 5 | umask(0002); // This will let the permissions be 0775
// or
umask(0000); // This will let the permissions be 0777 |
注意使用ACL才是访问服务器文件时的推荐方式,因为改变umask并非线程安全(thread-safe)。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。