私はLaravelに慣れていません。 http://localhost/test/public/
を開こうとしたところ
例外ハンドラでエラーが発生しました。
私は歩き回り、chmod -R 777 app/storage
を使用してstorage directoryの許可を変更しましたが、役に立ちませんでした。
debug=>true
をapp.php
に変更してページにアクセスし、例外ハンドラにErrorを入れました。
ストリームまたはファイル "/var/www/html/test/app/storage/logs/laravel.log"を開けませんでした:ストリームを開けませんでした:/ var/www/html/test/bootstrap/compileで許可が拒否されました。 php:8423
それからコマンドchmod -R 644 app/storage
を使ってstorageディレクトリのパーミッションを変更し、 'Error in exception handler'エラーがなくなり、ページがロードされました。しかし、そこに私はこれを得ています:
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json):ストリームを開けませんでした:アクセス権が拒否されました
vsmoraes からの提案は私のために働いた:
Laravel> = 5.4
php artisan cache:clear
chmod -R 777 storage/
composer dump-autoload
Laravel <5.4
php artisan cache:clear
chmod -R 777 app/storage
composer dump-autoload
注:どのリモートサーバでもこれを行わないでください(DEV OR PRODUCTION)
私がこの質問をしたとき、これは私のローカルホストの問題で、仮想マシンで動作していました。それで私は777を設定することは十分に安全であると思いました、しかし、人々は彼らがあなたが異なる解決策を探すべきであると言うとき正しいです。最初に775をお試しください
Laravelでこの問題に直面しているGoogleユーザー向け5。
これは、異なるユーザーが異なるパーミッションでstorage/logs
フォルダー内の同じログファイルに書き込もうとすることにより引き起こされるパーミッションの問題です。
laravel configはおそらく毎日エラーを記録するように設定されているため、Webサーバー(Apache/nginx)は、環境によっては_www
のようなデフォルトユーザーの下にこのファイルを作成する可能性がありますOSXまたは* NIXシステムのwww-data
では、職人のコマンドを実行してエラーが発生した場合に問題が発生するため、職人はこのファイルを書き込みますが、PHP端末上で実際にログインユーザーとは別のユーザーによって実行されている場合は、次のコマンドを実行してチェックアウトできます。
php -i | grep USER
ログインユーザーがそのログファイルをウェブサーバーに作成した場合、laravelはデフォルトで655
権限でログファイルを書き込むため、オーナーにのみ許可されるため、ウェブサーバーにエラーを書き込むことはできません。書いて。
この一時的な問題を修正するには、このファイルにグループ664
のアクセス許可を手動で付与して、ログインユーザーとWebサーバーユーザーの両方がそのログファイルに書き込みできるようにする必要があります。
この問題を永久に回避するには、この回答ディレクトリから権限を継承することにより、storage/logs
dir内に新しいファイルを作成するときに適切な権限を設定することをお勧めします https://unix.stackexchange.com/ a/115632 は、それに取り組むのに役立ちます。
Laravel 5を使用しているすべての人にとって、HomesteadとMacはこれを試します。
mkdir storage/framework/views
777権限を与えてはいけません。これはセキュリティ上のリスクです。 Ubuntuユーザのために、Laravel 5に、ディレクトリストレージの所有者を再帰的に変更することをお勧めします。
フォローしてみてください。
Sudo chown -R www-data:www-data storage
Ubuntuベースのシステムでは、www-dataはApacheユーザーです。
時々SELINUXはこの問題を引き起こしました。このコマンドでselinuxを無効にすることができます。
Sudo setenforce 0
問題が解決しました
php artisan cache:clear
Sudo chmod -R 777 vendor storage
これにより、アプリ、フレームワーク、ログへの書き込み権限が有効になります。
気の利いたユーザにとっての解決策は次のとおりです。
(vagrant)php職人のキャッシュ:クリア
(vagrantの外側)chmod -R 777アプリ/ストレージ
(vagrant)作曲家ダンプオートロード
Vagrantの内部ではなく、自分のローカル環境でchmodを実行することが重要です。
あなたの端末のlaravelプロジェクトのディレクトリに行き、書いてください:
Sudo chown -R your-user:www-data /path/to/your/laravel/project/
Sudo find /same/path/ -type f -exec chmod 664 {} \;
Sudo find /same/path/ -type d -exec chmod 775 {} \;
Sudo chgrp -R www-data storage bootstrap/cache
Sudo chmod -R ug+rwx storage bootstrap/cache
このようにして、あなたはあなたのユーザを所有者にして特権を与えます:
1実行、2書き込み、4読み取り
1 + 2 + 4 = 7は(rwx)を意味します
2 + 4 = 6は(rw)を意味します
最後に、ストレージアクセスの場合、ug + rwxはユーザーとグループに7を与えることを意味します。
chmod -R 755 /var/www/html/test/app/storage
でもう一度やり直してください。 chmodのOperation not permitted
にSudoと一緒に使用します。それでもエラーが発生する場合は、[所有者権限の確認]を使用してください。
Laravel 5.4に従って、これを書いている時点では最新のものです。このような問題がある場合は、許可を変更する必要があります。 ディレクトリを777に設定する必要がある人は誰にも聞かないでください。 セキュリティ上の問題があります。保存フォルダの権限をこのように変更する
Sudo chmod -R 775 storage
ブートストラップフォルダのアクセス権をこのように変更します
Sudo chmod -R 775 bootstrap/cache
アプリケーションディレクトリから両方のコマンドを実行していることを確認してください。あなたは許可に関して将来問題に直面することはないでしょう。 775はあなたのマシンのいかなるセキュリティも危険にさらしません。
Apacheの場合は、正しい許可を提案してください。
Sudo chown -R Apache:apache apppath/app/storage
Laravel 5 があり、恒久的な解決方法を探している場合は、php artisan
コマンドラインの使用法とApacheサーバーの両方に適用できます。
Sudo chmod -R 777 vendor storage
echo "umask 000" | Sudo tee -a /etc/resolv.conf
Sudo service Apache2 restart
詳しい説明を見る ここ 。
SELINUXでOSを走らせている人のために:httpdがlaravelストレージフォルダに書き込めるようにする正しい方法は:
Sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
すぐに変更を適用するには:
Sudo restorecon -F -r '/path/to/www/storage'
SELinuxは対処するのが面倒かもしれませんが、それが存在するのであれば私はそれを完全に迂回するのではなくそれを学ぶことを強くお勧めします。
私は同じ問題を抱えていました、そして、以下のステップは私が問題を解決するのを助けました。
<?php echo exec('whoami'); ?>
そしてWebブラウザからファイルを実行します。それはApacheユーザーになります。私の場合、cronjobが/etc/cron.d/にインストールされたawを使用していたので、ec2ユーザーです。それは他の人にとっては異なるユーザーかもしれません。
Sudo chown -R ec2-user:<usergroup> /app-path/public
ここで正しい「ユーザー」と「ユーザーグループ」を識別して使用する必要があります。
使用するXampp:
cd /Applications/XAMPP/htdocs
chmod -R 775 test/app/storage
rm storage/logs/laravel.log
私のためにこれを解決しました
Laradockを使用している場合は、ワークスペースコンテナでchown -R laradock:www-data ./storage
を試してください。
App.phpを変更したときはいつでも、bootstrap/cache/services.jsonの書き込みを拒否されたアクセス権があるので、修正しました。
chmod -R 777 bootstrap/cache/
私の場合の解決策はパーミッションをapp/storage/framework/views
とapp/storage/logs
ディレクトリに変更することでした。
プロジェクトで同じエラーが発生しました。
しかし、私は自分の形にenctype
を入れるのを忘れたことを知りました。
<form method="#" action="#" enctype="multipart/form-data">
どういうわけかそれがどこかに役立つことを願っています...
他の誰かがfopenファイルのアクセス権エラーで同様の問題に遭遇したが、盲目的にここで777をchmodしないように十分に賢明な場合は私の提案です。
使用しているコマンドで、Apacheに必要な権限を確認してください。
fopen('filepath/filename.pdf', 'r');
「r」は読み取り専用で開くことを意味します。ファイルを編集していない場合は、これを設定する必要があります。これはApache/www-dataが少なくともそのファイルの読み込み許可を必要とすることを意味します。ファイルがlaravelを通して作成された場合、それはすでに読み込み許可を持っているでしょう。
何らかの理由でファイルに書き込む必要がある場合
fopen('filepath/filename.pdf', 'r+');
それから、Apacheにもファイルへの書き込み権限があることを確認してください。
私は同様の問題を抱えていました。 Laravel 5.2および5.5で(許可が正しく設定されている場合は許可が拒否されました)
問題はSELinuxが有効になっていて、777モードでもApacheがファイルを書き込めないことでした。質問と回答については、 500応答の回答Laravel(不明なUnexpectedValueException:Laravel.log } _を参照してください。
多分これはあなたのために問題を解決します。
LaragonとLaravel 4を使用してWindows 10で作業している間、Laragon-in-built-terminalでchmod
-コマンドを実行しても効果がないため、アクセス許可を手動で変更する方法はありません。
ただし、この端末ではstorageフォルダに移動して手動で次のように目的のフォルダを追加することができました。
cd app/storage
mkdir cache
mkdir meta
mkdir views
mkdir sessions
ターミナルのcd
-コマンドでフォルダに移動します(ファイル構造に合うようにこのパスを調整する必要があるかもしれません)。 mkdir
-コマンドは与えられた名前でディレクトリを作成します。
私はLaravel 5でこの方法をテストする機会がありませんでしたが、同様の方法でうまくいくはずです。
もちろんもっと良い方法があるかもしれませんが、少なくともこれは私の状況では妥当な回避策でした(エラーを修正する:file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
)。
ディレクトリのアクセス権に関する多くの試行錯誤の結果、私はエピファニーになりました...ディスクのパーティションにはスペースが残っていませんでした。間違った方向で解決策を探し続けるのに他の誰もが愚かでないことを確認するために共有したいと思いました。
Linuxでは、df -h
を使ってディスクサイズと空き容量をチェックできます。
777に許可を設定することは間違いなくひどいアイデアです!
…でも
あなたが "ストレージ"フォルダに接続されているアクセス許可エラーを得ているなら、それは私のために働いたものです:
1) "storage"とそのサブフォルダの許可を777に設定します。
Sudo chmod -R 777 storage/
2)ブラウザでlaravelのホームページlaravel/public /に移動します(laravelは必要な初期保存ファイルを作成します)
3)安全な775許可をストレージとそのサブフォルダーに返却する
Sudo chmod -R 775 storage/
この問題は、実際にはwrite/read
ファイルを作成しようとしたが拒否されたユーザーが異なるために、所有権が異なります。多分あなたは 'laravel'デフォルトの所有権である 'laravel'ユーザとしてあなたのサイトにログインする前に 'root'としてlaravelをインストールしたので、これはここで実際に本当の問題です。そのため、ユーザ 'laravel'がデフォルトでディスク内のすべてのファイルを読み書きしたいときに、そのファイルが 'root'による所有権を持つようにします。
この問題を解決するには、次のようにします。
Sudo chown -hR your-user-name /root /nameforlder
または私の場合
Sudo chown -hR igmcoid /root /sublaravel
脚注:
root
your-user-name
。namefolder
。私はMac上でvagrantを実行するときに同じ問題を抱えています。 https.confファイルでApacheサーバーのユーザーを変更することで問題を解決しました。
# check user for php
[vagrant] ubuntu ~ $ php -i | grep USER
USER => ubuntu
$_SERVER['USER'] => ubuntu
[vagrant] ubuntu ~ $
Phpによるファイルアクセスの問題を解決するために、ユーザーデーモンではなくphpユーザーでApacheを実行します。
# change default Apache user from daemon to php user
Sudo sed -i 's/User daemon/User ubuntu/g' /opt/lampp/etc/httpd.conf
Sudo sed -i 's/Group daemon/Group ubuntu/g' /opt/lampp/etc/httpd.conf
現在、phpで作成されたキャッシュファイルは、アクセス許可エラーを表示することなく、Apacheによって読み取られ編集されることができます。