Tatsächlich bin ich ziemlich neu bei Laravel und versuche mein erstes Projekt zu erstellen. Aus irgendeinem Grund wird dieser Fehler immer wieder angezeigt (ich habe noch nicht einmal mit dem Codieren begonnen).
Error in exception handler: The stream or file "/var/www/laravel/app/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/laravel/bootstrap/compiled.php:8423
Ich habe gelesen, dass dies etwas mit Berechtigungen zu tun hat, aber chmod -R 775 storage
überhaupt nicht geholfen hat.
Antworten:
Stellen Sie niemals ein Verzeichnis auf 777 ein . Sie sollten den Verzeichnisbesitz ändern. Stellen Sie also Ihren aktuellen Benutzer so ein, dass Sie als Eigentümer und den Webserver-Benutzer (www-data, apache, ...) als Gruppe angemeldet sind. Sie können dies versuchen:
Versuchen Sie dann Folgendes, um die Verzeichnisberechtigung festzulegen:
Aktualisieren:
Der Benutzer und die Gruppe des Webservers hängen von Ihrem Webserver und Ihrem Betriebssystem ab. Verwenden Sie die folgenden Befehle, um herauszufinden, was Ihr Webserverbenutzer und Ihre Gruppe sind. für Nginx verwenden:
ps aux|grep nginx|grep -v grep
für Apache verwenden:
ps aux | egrep '(apache|httpd)'
quelle
sudo chown -R {your current user}:www-data storage bootstrap/cache
chown: www-data: illegal group name
. Das Einstellen des Verzeichnisses auf 777 ist das einzige, was funktioniert_www
versucht diessudo chgrp -R _www bootstrap/cache
. Es wäre hilfreich, einen Blick auf diesen Beitrag zu werfenVerwenden Sie 777 niemals für Verzeichnisse auf Ihrem Live-Server, aber auf Ihrem eigenen Computer müssen wir manchmal mehr als 775 ausführen, weil
Meint
Wenn Ihr Webserver nicht als Vagrant ausgeführt wird, kann er nicht darauf schreiben. Sie haben also zwei Möglichkeiten:
oder ändern Sie die Gruppe in Ihren Webserver-Benutzer, vorausgesetzt, es ist
www-data
:quelle
chown -R apache:apache laravelproject
chown -R vagrant:www-data storage
habe es für mich getan, danke.www-data: illegal group name
Um dieses Problem zu beheben, müssen Sie den Besitz des Verzeichnisses auf den vom Webserver verwendeten Unix-Benutzer ändern.
Obwohl ich das Projekt innerhalb der VM mit dem VM-Benutzer erstellt habe, gehörte der Ordner dem Benutzer auf dem realen Computer. Also, wenn ich es versuche
Jetzt geht es.
Vielen Dank an alle, die mir geholfen haben, diese Sache herauszufinden
BEARBEITEN:
Eigentlich funktionierte es immer noch nicht, es gab mir immer noch ein Problem "Erlaubnis verweigert".
Folgendes habe ich getan: Ich habe mein Vagrantfile folgendermaßen geändert:
quelle
Es kann auch SELinux sein. (Centos, RedHat)
Bestimmen Sie den Status von SElinux am Terminal:
Wenn der Status aktiviert ist, schreiben Sie einen Befehl, um SElinux zu deaktivieren
Oder Sie können diesen Befehl ausführen
$ sudo setenforce 0
quelle
Sie müssen die Berechtigungen von
storage
und anpassenbootstrap/cache
.cd
in Ihr Laravel-Projekt.sudo chmod -R 755 storage
sudo chmod -R 755 bootstrap/cache
Sie können 777 ausprobieren, wenn 755 nicht funktioniert. 777 ist allerdings nicht sicher!
Abhängig davon, wie Ihr Webserver eingerichtet ist, können Sie Ihre Berechtigungen möglicherweise genauer festlegen und sie nur Ihrem Webserverbenutzer gewähren. Google
WEB SERVER NAME Laravel file permissions
für weitere Informationen.Zum Zeitpunkt des Schreibens ist dies für Laravel 5.4
quelle
Hinzufügen
composer.json
Nach dem
composer install
quelle
Führen Sie die folgenden Befehle aus, die Sie
sudo
zu Beginn des Befehls hinzufügen können. Dies hängt von Ihrem System ab:quelle
Für alle Centos 7-Benutzer in einem Laravel-Kontext muss Selinux nicht deaktiviert werden. Führen Sie einfach die folgenden Befehle aus:
Stellen Sie schließlich sicher, dass Ihre Hosts, IPs und virtuellen Hosts für den Remotezugriff korrekt sind.
Selinux soll den Zugriff auch auf Root-Benutzer beschränken, so dass möglicherweise nur auf das erforderliche Material zugegriffen werden kann, zumindest in einer allgemeinen Übersicht, es ist zusätzliche Sicherheit, das Deaktivieren ist keine gute Praxis, es gibt viele Links, um Selinux zu lernen, aber dafür Fall ist es nicht einmal erforderlich.
quelle
Wenn Sie cmd verwenden
Wenn Sie GUI verwenden
Gehen Sie zuerst zum Projekt und klicken Sie mit der rechten Maustaste auf den Speicher, überprüfen Sie die Eigenschaften und wechseln Sie zur Registerkarte Berechtigungen
Ändern Sie die Berechtigungen mit dem folgenden Code
Dann können Ihre Dateieigenschaften sein
Dann überprüfe deine Einstellungen und führe den Laravel-Befehl aus, es wird funktionieren :)
quelle
In Laravel sollten Sie ACL
storage
undcache
Verzeichnis festlegen, damit der Webserverbenutzer das Verzeichnis lesen / schreiben kann. Öffnen Sie ein neues Terminal und führen Sie Folgendes aus:Verweise:
https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd
https://linux.die.net/man/1/setfacl
quelle
Es könnte spät sein, aber jemandem helfen, das Ändern der Verzeichnisberechtigungen hat bei mir funktioniert.
Angenommen, Ihr Laravel-Projekt befindet sich im
/var/www/html/
Verzeichnis.Ändern Sie dann die Berechtigungen
storage/
undbootstrap/cache/
Verzeichnisse.quelle
Diese Lösung ist spezifisch für Laravel 5.5
Sie müssen die Berechtigungen für einige Ordner ändern: chmod -R -777 Speicher / Protokolle chmod -R -777 Speicher / Framework für die oben genannten Ordner 775 oder 765 funktionierten für mein Projekt nicht
Außerdem sollte der Eigentümer des Projektordners wie folgt sein (aktueller Benutzer) :( Webserver-Benutzer)
quelle
Du könntest es tun:
quelle
Ich war nicht besonders daran interessiert, meine Ordnerberechtigungen auf 777 zu ändern. So habe ich dieses Problem behoben.
Zuerst habe ich den Benutzer geändert, der den Webserver auf meinem lokalen Computer ausführt (ich führe nginx aus, aber die Prinzipien gelten überall):
Danach habe ich eine weitere
index.php
Datei unter dempublic/
Ordner erstellt, um herauszufinden, wer meine PHP-Fpm-Version ausführt und wo ich das ändern würde:Beim erneuten Laden der Seite stellte ich fest, dass
www-data
es sich um den Benutzer handelte (im Abschnitt "Umgebung"). Ich fand auch heraus, dass ich PHP 7.1 laufen ließ. Ich habe den Benutzer geändert:Schließlich habe ich Ordnern die folgenden Berechtigungen erteilt:
Jetzt stellte ich sicher, dass ich der Eigentümer der Ordner war, indem ich Folgendes verwendete:
Wenn Sie die Server- und PHP-Fpm-Benutzer auf sich selbst einstellen und die Ordner beispielsweise Root gehören, tritt dieses Problem weiterhin auf. Dies kann passieren, wenn Sie eine
sudo laravel new <project>
als root ausgeführt haben. Stellen Sie in diesem Fall sicher, dass Sie einen rekursivenchown
Befehl für Ihr Projekt verwenden, um dieuser:group
Einstellungen zu ändern . In den meisten Standardfällenwww-data
ist dies die Haupteinstellung für den Server und PHP. In diesem Fall muss sichergestellt werden, dass der Ordner nicht leer istwww-data
Reichweite liegt.Mein Projekt wird in meinem Home-Verzeichnis eingerichtet. Unter Ubuntu 16.04 und Laravel 5.5.
quelle
Versuche dies
quelle
setenforce
aber es ist auf jeden Fall falsch, SELinux vollständig zu deaktivieren, um nur ein Berechtigungsproblem zu beheben.In meinem speziellen Fall wurde eine Konfigurationsdatei generiert und im
bootstrap/cache/
Verzeichnis zwischengespeichert, sodass meine Schritte wie folgt waren:rm bootstrap/cache/*.php
Erstellen Sie eine neue
laravel.log
Datei und wenden Sie die Aktualisierung der Berechtigungen auf die Datei an, indem Sie:chmod -R 775 storage
quelle
(unter Ubuntu ): Kann in 2 einfachen Schritten gelöst werden:
Und
quelle
Löschen
"/var/www/laravel/app/storage/logs/laravel.log"
und erneut versuchen:rm storage/logs/laravel.log
quelle
Hatte dieses Problem und fand dies und es löste das Problem.
quelle
Dieser Fehler kann durch Deaktivieren von Linux behoben werden.
Überprüfen Sie, ob es aktiviert wurde
sestatus
Sie versuchen..
setenforce 0
quelle
Für diesen Fehler:
Fehler im Ausnahmebehandler: Der Stream oder die Datei "/var/www/laravel/app/storage/logs/laravel.log" konnte nicht geöffnet werden: Stream konnte nicht geöffnet werden: Berechtigung in / var / www / laravel / bootstrap / compiled verweigert .php: 8423
Verwenden Sie diesen Befehl im Terminal:
quelle
Mein Problem mit diesem Befehl in Centos 7.6 Server wurde behoben
quelle