2017-08-25 19 views
1

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による書き込みアクセスを許可せず、読み取りのみを行います。

可能であれば、これを修正します。

答えて

0

この問題の解決策が見つかりました。 ACL!

Macでは、chmod +a ...のオプションがあります。これは、指定したフォルダにデフォルトのディレクトリアクセス権を追加します。私の場合、私は、彼らは両方絶えずそれへの書き込み/アクセスすることがありますから、storageの下のファイル/フォルダへtim_wwwフルアクセスを許可するACLを使用する:これを適用する

chmod -R +a 'tim allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit' storage 
chmod -R +a '_www allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit' storage 

は、再帰的にACLがあることを可能にしますLaravelによってストレージディレクトリに生成されたフォルダに設定します。最も重要なものはstorage/framework/cacheです。 Linuxの

、ACLは若干異なるように見えるが、考え方は同じです:

chmod g+s storage 
setfacl -R -d -m u::rwx storage 
setfacl -R -d -m g::rx storage 
setfacl -R -d -m o::rx storage 

この効果的に何であるように思われ、755にストレージへのファイルのパーミッション(およびすべてのサブフォルダ)を設定します私の設定は適切に書くことができる必要があります。

関連する問題