27

この質問は何度か聞かれましたが、私の状況ではどの解決策もそれを修正しません。

MacOSXLionで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/envvarsLinuxで検索する場合、2つの変数APACHE_RUN_USER=www-dataとがありますAPACHE_RUN_GROUP=www-data)。
  • これは、Symfony2の肩の上にWebサイトを構築し、それをApacheで実行すると、すべての書き込みと読み取りがApacheに代わって行われるusergroupことを意味します。

問題を分析します。

  • まず、次のようなエラーがあります。

    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フォルダはあなたのApacheuserと。に対して書き込み可能ではないからですgroup

  • 次に、以下を実行します。

    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)を変更して、(基本的には)およびにいくつかのアクセス許可を付与します。このアプローチは機能せず、次の2つの原因が考えられます。app/cacheapp/logswhoami_www

    1. ACLを変更していますが、カーネルとファイルシステムはACLを考慮に入れるように構成されていますか?

    2. whoamiとにいくつかの権限を付与し_wwwていますが、Apacheインスタンスがこれらのユーザーのいずれかで実行されていることを確認しましたか?

  • 第三に、同僚は以下を実行して問題を解決します。

    sudo chmod -R 777 app/cache 
    

    このアプローチは、次の2つの理由で機能します。

    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をブロックしていたことが判明しました。以下は私のために働きました(my-projectをあなたの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を無効にすることもできますが、現在のセッションで一時的にのみ問題を切り分けます(prodにはこれをお勧めしません)

sudo setenforce 0

クレジット

于 2019-07-03T00:20:08.910 に答える