Laravelのファイル/フォルダのアクセス許可が異なるソースから生成されている場合に、アクセス権に問題があります。これは少し長いかもしれないが、私と一緒に耐えるかもしれない。Laravelストレージフレームワークとログファイル/フォルダのアクセス許可
シナリオ
1)artisan
コマンドは、TestCommand.php
と呼ばれる、php artisan test:command
介してトリガ次のコードを有している:TestController.php
でContoller機能)
public function handle(){
\Log::info("Test Command Executed from Command Line");
}
2、http://localhost/test
にアクセスするときに有し、トリガ次のコード:
public function test(){
\Log::info("Test Command Executed from Web View");
}
両方の機能が個別に起動されたときに正常に動作しますが、がトリガーされるとすぐに、もう一方は機能しません。storage/logs
の生成ログファイルにが生成されるようになりました。
状況1
私はphp artisan test:command
を実行した場合、I次のログファイルを取得:
-rw-r--r-- | 1 | tim | wheel | 76B | 25 Aug 14:03 | laravel-2017-08-25.log
そしてナビゲーションhttp://localhost/test
に戻り、次のエラー:
This page isn’t working
localhost is currently unable to handle this request.
HTTP ERROR 500
ませんLaravelスタックトレース(「Woops、何かが間違っていた」)が表示されます。ラーヴェルのログ。私が最初にhttp://localhost/test
に移動した場合、私はこのログファイルを取得
状況2
:
-rw-r--r-- | 1 | _www | wheel | 72B | 25 Aug 14:06 | laravel-2017-08-25.log
そしてphp artisan test:command
を実行するには、次の値を返します。
PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'The stream or file ".../storage/logs/laravel-2017-08-25.log" could not be opened: failed to open stream: Permission denied' in .../vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:97 Stack trace: ...
結論
tim
ではなく、_www
になりました。これは、ファイルの生成元がstorage/logs
であると想定されます。遡って、これは実行することにより、非常に簡単に固定することができます。
sudo chmod -R 777 storage/logs
しかし、それはいくつかの理由のために良い解決策ではありません。
- 777は、生産のWebサーバに悪いアイデアであり、755は」doesnの私の設定ではうまくいかないようです。
- 新しいファイルが作成されるたびに(ログの場合は毎日、
storage/framework/*
のファイルの場合はいつでも)、このコマンドを再度実行する必要があります。 - 私は、このコマンドを1日に何度も実行しなければならないウェブサーバーに直接アクセスすることはできません。
どのようにすれば、ファイルを統合してソースからファイルを作成し、必要に応じてファイルを変更できるようにするにはどうすればよいですか?
Webサーバは、Apacheで、DEV環境はMacがあり、生産は、私は良い解決策は、同じグループ内のtim
と_www
を持ち、かつ使用してそのグループにstorage/logs
を割り当てることだと思うのlinux
更新
です
chgrp -R <user_group> storage
しかし、その後、次の問題は、デフォルトで、Laravelで生成されたすべてのフォルダのアクセス許可がであるということですは、group
による書き込みアクセスを許可せず、読み取りのみを行います。
可能であれば、これを修正します。