27

这个问题已经被问过好几次了,但没有一个解决方案能解决我的问题。

我在 Mac OSX Lion 上运行 Apache。此http://localhost/Symfony/web/config.phpURL 引发 2 个主要问题:

Change the permissions of the "app/cache/" directory so that the web server can write into it.
Change the permissions of the "app/logs/" directory so that the web server can write into it.

按照“设置权限”下的指南:

rm -rf app/cache/*
rm -rf app/logs/*
sudo chmod +a "_www 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

这并不能解决问题,所以我尝试了:

sudo chmod -R 777 app/cache

那也行不通。任何想法如何解决这一问题?

4

4 回答 4

50

一些初步解释:

  • 为了提高您网站的性能,Symfony2 需要缓存大量数据,它通过将编译后的文件写入您的app/cache目录来做到这一点。
  • 为了提供强大的调试和监控工具,Symfony2 需要跟踪你的网站行为,它通过将跟踪文件写入你的app/logs目录来做到这一点。

关于 Apache 的一些话:

  • Apache 在特定user和特定下运行group(通常www-data两者都有,但您必须检查您的安装以找到使用的。例如,如果您/etc/apache2/envvars在 Linux 中搜索,您将有两个变量APACHE_RUN_USER=www-dataAPACHE_RUN_GROUP=www-data)。
  • 这意味着当您在 Symfony2 的肩膀上构建您的网站并在 Apache 下运行它时,每次写入和读取都是代表 Apacheusergroup.

分析你的问题:

  • 首先,您有以下错误:

    Change the permissions of the "app/cache/" directory so that the web server can write into it.
    Change the permissions of the "app/logs/" directory so that the web server can write into it.
    

    因为您的app/cacheapp/logs文件夹对于您的 Apacheusergroup.

  • 其次,通过执行:

    sudo chmod +a "_www 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
    

    您正在修改和文件夹的访问控制列表 (ACL),以便授予(基本上是您)和. 这种方法不起作用,可能有两个来源:app/cacheapp/logswhoami_www

    1. 您正在修改 ACL,但您的内核和文件系统是否配置为考虑 ACL?

    2. 您正在授予whoami和 to一些权限_www,但您是否检查过您的 Apache 实例是否在这些用户之一下运行?

  • 第三,您的同事通过执行以下命令来解决问题:

    sudo chmod -R 777 app/cache 
    

    这种方法之所以有效,有两个原因:

    1. 您将所有权限(读取和写入)授予系统上的每个用户 ( 777),因此您确信至少您的 Apache 用户和组也具有写入所需的权限app/cache
    2. 您以递归方式 ( -R) 执行此操作,因此在目录中创建的所有嵌套文件夹app/cache也与新权限有关。

简单的解决方案:

  1. 删除您的app/cacheapp/logs文件夹的内容:

    rm -rf app/cache/*
    rm -rf app/logs/*
    
  2. 授予您app/cacheapp/logs文件夹的所有权限(读取和写入):

    chmod 777 app/cache
    chmod 777 app/logs
    

评论:

  • 还有其他解决方案(难度更大),例如授予特定 Apache 用户和组的权限以及使用 ACL 进行微调。
于 2012-07-13T23:31:29.507 回答
9

“设置权限”下的指南说,如果您的系统不支持 chmod +a 您必须这样做:

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

如果这不起作用试试这个:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777

第一个解决方案对我有用。我希望它可以帮助遇到相同类型问题的人。

于 2014-06-18T13:28:15.340 回答
1
rm -rf app/cache/*
rm -rf app/logs/*


APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs

Source: http://symfony.com/doc/current/book/installation.html#configuration-and-setup

于 2013-10-12T18:08:02.830 回答
0

接受的答案很棒,但是在我的情况下(Centos 7 和 Symfony 4.3),即使在设置权限后我仍然遇到错误。事实证明SELinux阻止了 Apache。以下对我有用(将我的项目更改为您的 Symfony 安装文件夹)。

sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-project/var/cache/
sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-project/var/log/

您也可以禁用 SELinux,但只能暂时禁用当前会话以隔离问题(我不建议将其用于产品)

sudo setenforce 0

学分

于 2019-07-03T00:20:08.910 回答