Ich bin neu in Laravel. Ich habe versucht zu öffnen http://localhost/test/public/
und ich habe
Fehler im Ausnahmebehandler.
Ich googelte herum und änderte die Berechtigung des Speicherverzeichnisses mit, chmod -R 777 app/storage
aber ohne Erfolg.
Ich wechselte debug=>true
in app.php
und besuchte die Seite und bekam Fehler in Exception - Handler:
Der Stream oder die Datei "/var/www/html/test/app/storage/logs/laravel.log" konnte nicht geöffnet werden: Stream konnte nicht geöffnet werden: Berechtigung in / var / www / html / test / bootstrap / compiled verweigert. PHP: 8423
Dann habe ich die Berechtigungen des Speicherverzeichnisses mit dem Befehl geändert chmod -R 644 app/storage
und der Fehler 'Fehler im Ausnahmebehandler' war verschwunden und eine Seite wird geladen. Aber da drin bekomme ich folgendes:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): Stream konnte nicht geöffnet werden: Berechtigung verweigert
php artisan cache:clear
dannchmod -R 777 app/storage
endlichphp artisan dump-autoload
Antworten:
Der Vorschlag von vsmoraes hat bei mir funktioniert:
Laravel> = 5,4
Laravel <5.4
HINWEIS: TUN SIE DAS NICHT AUF EINEM FERNSERVER (DEV ODER PRODUKTION)
Als ich diese Frage stellte, war dies ein Problem auf meinem lokalen Host, der in einer virtuellen Maschine ausgeführt wurde. Daher dachte ich, die Einrichtung eines 777 sei sicher genug, aber die Leute haben Recht, wenn sie sagen, Sie sollten nach einer anderen Lösung suchen. Versuchen Sie zuerst 775
quelle
php artisan cache:clear
dannchmod -R 777 storage
und danncomposer dump-autoload
chmod -R 777 storage
stattdessen tunphp artisan cache:clear
ist die richtige Antwort. Dannsudo chmod -R ug+rw storage
gibt die richtigen Berechtigungen für mich, ohne Angabe vonothers
Lese- / Schreib oder insbesondere Privilegien auszuführen.777
nachzudenken (ich verstehe, dass es nicht Laravel-spezifisch ist, aber Der Denkprozess für Laravel-Entwickler lautet: "Lass es JETZT funktionieren, es ist mir egal, wie", genau wie777
). Stellen Sie in der Regel niemals etwas ein777
, um etwas zum Laufen zu bringen. VERSTEHEN Sie Ihren Server und Ihre Benutzer / Rollen und stellen Sie sie entsprechend ein. Hack es nicht. Ihre Kunden vertrauen darauf, dass Sie dies richtig machen.Für Googler, die mit Laravel 5 vor diesem Problem stehen.
Dies ist ein Berechtigungsproblem, das von verschiedenen Benutzern verursacht wird, die versuchen,
storage/logs
mit unterschiedlichen Berechtigungen in dieselbe Protokolldatei im Ordner zu schreiben .Was passiert, ist, dass Ihre Laravel-Konfiguration wahrscheinlich so eingerichtet ist, dass Fehler täglich protokolliert werden. Daher kann Ihr Webserver (Apache / Nginx) diese Datei unter einem Standardbenutzer erstellen. Abhängig von Ihrer Umgebung kann dies etwa
_www
unter OSX- oderwww-data
* NIX-Systemen der Fall sein Wenn Sie möglicherweise einige Handwerkerbefehle ausgeführt haben und einige Fehler aufgetreten sind, schreibt der Handwerker diese Datei, jedoch mit einem anderen Benutzer, da PHP auf dem Terminal von einem anderen Benutzer ausgeführt wird, der tatsächlich Ihr Anmeldebenutzer ist. Sie können dies überprüfen, indem Sie diesen Befehl ausführen ::Wenn Ihr Anmeldebenutzer diese Protokolldatei auf Ihrem Webserver erstellt hat, können Sie keine Fehler darin schreiben und umgekehrt, da laravel
655
standardmäßig Protokolldateien mit Berechtigungen schreibt, die nur dem Eigentümer erlauben, darin zu schreiben.Um dieses Problem vorübergehend zu beheben, müssen Sie
664
dieser Datei manuell Berechtigungen für die Gruppe erteilen, damit sowohl Ihr Anmeldebenutzer als auch Ihr Webserverbenutzer in diese Protokolldatei schreiben können.Um dieses Problem dauerhaft zu vermeiden, möchten Sie möglicherweise die richtigen Berechtigungen einrichten, wenn eine neue Datei
storage/logs
im Verzeichnis erstellt wird, indem Sie die Berechtigungen aus dem Verzeichnis erben. Diese Antwort https://unix.stackexchange.com/a/115632 kann Ihnen dabei helfen Das.quelle
Sie sollten keine 777-Berechtigungen erteilen. Es ist ein Sicherheitsrisiko. Für Ubuntu-Benutzer in Laravel 5 empfehle ich, den Besitzer für die Verzeichnisspeicherung rekursiv zu ändern:
Versuchen Sie Folgendes:
In Ubuntu-basierten Systemen sind www-Daten Apache-Benutzer.
quelle
chmod 777
Antworten. Danke ~chmod 777
ist ein Albtraum.chmod 777
Konsequenzen umzukehren ?Für alle, die Laravel 5, Homestead und Mac verwenden, versuchen Sie Folgendes:
quelle
bootstrap/cache/compiled.php
als hätte ich versucht, in dieses Verzeichnis zu schreiben, aber es war nicht vorhanden und hat einen Berechtigungsfehler ausgelöst. Danke dir.manchmal hat SELINUX dieses Problem verursacht; Sie können Selinux mit diesem Befehl deaktivieren.
quelle
Problem gelöst
Dies ermöglicht die Schreibberechtigung für App, Framework und Protokolle. Ich hoffe, dies wird helfen
quelle
GEBEN SIE ES NIEMALS DIE ERLAUBNIS 777!
Gehen Sie in das Verzeichnis des Laravel-Projekts auf Ihrem Terminal und schreiben Sie:
Auf diese Weise machen Sie Ihren Benutzer zum Eigentümer und gewähren Berechtigungen:
1 Ausführen, 2 Schreiben, 4 Lesen
1 + 2 + 4 = 7 bedeutet (rwx)
2 + 4 = 6 bedeutet (rw)
schließlich für den Speicherzugriff, ug + rwx bedeutet, dass Sie dem Benutzer und der Gruppe eine 7 geben
quelle
Für vagabundierende Benutzer lautet die Lösung:
(in vagrant) PHP Artisan Cache: klar
(außerhalb des Vagabunden) chmod -R 777 App / Speicher
(in vagrant) Komponist Dump-Autoload
Hier ist es wichtig sicherzustellen, dass Sie in Ihrer lokalen Umgebung und nicht in Vagabunden chmod!
quelle
Versuchen Sie es erneut mit
chmod -R 755 /var/www/html/test/app/storage
. Verwenden Sie mit sudo fürOperation not permitted
in chmod. Verwenden Sie Eigentümerberechtigung prüfen, wenn der Fehler weiterhin auftritt.quelle
Gemäß Laravel 5.4, dem neuesten Stand, während ich dies schreibe, müssen Sie die Berechtigung ändern, wenn Sie ein solches Problem haben. Hören Sie niemandem zu, der Ihnen sagt, dass Sie 777 für ein Verzeichnis einstellen sollen. Es gibt ein Sicherheitsproblem. Ändern Sie die Berechtigung des Speicherordners wie folgt
Ändern Sie die Berechtigung für den Bootstrap-Ordner wie folgt
Stellen Sie nun sicher, dass Sie beide Befehle aus Ihrem Anwendungsverzeichnis ausführen. Sie werden in Zukunft keine Probleme mit der Erlaubnis haben. 775 beeinträchtigt keine Sicherheit Ihrer Maschine.
quelle
Schlagen Sie die richtige Berechtigung vor, wenn für Apache,
quelle
Wenn Sie über Laravel 5 verfügen und eine dauerhafte Lösung suchen, verwenden Sie sowohl die
php artisan
Befehlszeilennutzung als auch den Apache-Server:sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
Eine ausführliche Erklärung finden Sie hier .
quelle
FÜR JEDEN, DER EIN Betriebssystem MIT SELINUX AUSFÜHRT: Die richtige Methode, um httpd das Schreiben in den Laravel-Speicherordner zu ermöglichen, ist:
Dann, um die Änderungen sofort anzuwenden:
SELinux kann ein Problem sein, aber wenn es vorhanden ist, würde ich Ihnen dringend raten, es zu lernen, anstatt es vollständig zu umgehen.
quelle
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
Ich hatte das gleiche Problem und die folgenden Schritte halfen mir, das Problem zu beheben.
<?php echo exec('whoami'); ?>
Führen Sie die Datei über den Webbrowser aus. Es würde dem Apache-Benutzer geben. In meinem Fall ist es ec2-user, da ich die aws mit cronjob in /etc/cron.d/ verwendet habe. Es könnte ein anderer Benutzer für andere sein.
sudo chown -R ec2-user:<usergroup> /app-path/public
Sie müssen hier den richtigen "Benutzer" und die richtige "Benutzergruppe" identifizieren und verwenden.
quelle
Wenn Sie Linux oder Mac verwenden, können Sie auch in laufen
ssh terminal
. Sie können Terminal verwenden, um diesen Befehl auszuführen.Wenn Sie Windows verwenden, können Sie mit ausführen
git bash
.Sie können das Git-Formular https://git-scm.com/downloads herunterladen .
quelle
Xampp zur Verwendung:
quelle
Jedes Mal, wenn ich app.php ändere, erhalte ich eine Berechtigung, die das Schreiben von bootstrap / cache / services.json verweigert. Deshalb habe ich Folgendes getan, um das Problem zu beheben:
quelle
löste das für mich
quelle
Die Erlaubnis auf 777 zu setzen ist definitiv eine schreckliche Idee!
... aber
Wenn Sie einen Berechtigungsfehler im Zusammenhang mit dem Ordner "Speicher" erhalten, hat dies bei mir funktioniert:
quelle
Wenn Sie Laradock verwenden, versuchen Sie es
chown -R laradock:www-data ./storage
in Ihrem Arbeitsbereich-Containerquelle
In meinem Fall bestand die Lösung darin, die Berechtigung in
app/storage/framework/views
und dieapp/storage/logs
Verzeichnisse zu ändern .quelle
Wenn jemand anderes auf ein ähnliches Problem mit dem Fehler "fopen file permissions" stößt, aber klug genug ist, chmod 777 nicht blind zu machen, ist hier mein Vorschlag.
Überprüfen Sie den Befehl, den Sie verwenden, auf Berechtigungen, die Apache benötigt:
Das 'r' bedeutet, dass es nur zum Lesen geöffnet ist. Wenn Sie die Datei nicht bearbeiten, sollten Sie sie so einstellen. Dies bedeutet, dass Apache / WWW-Daten mindestens eine Leseberechtigung für diese Datei benötigen. Wenn die Datei über Laravel erstellt wird, verfügt sie bereits über eine Leseberechtigung.
Wenn Sie aus irgendeinem Grund in die Datei schreiben müssen:
Stellen Sie dann sicher, dass Apache auch über Berechtigungen zum Schreiben in die Datei verfügt.
http://php.net/manual/en/function.fopen.php
quelle
Starten Sie einfach Ihren Server mit
artisian
php artisian serve
Greifen Sie dann über die angegebene URL auf Ihr Projekt zu:
quelle
Ich habe das gleiche Problem, wenn Vagrant auf einem Mac ausgeführt wird. Das Problem wurde behoben, indem der Benutzer des Apache-Servers in der Datei https.conf geändert wurde:
Führen Sie Apache unter PHP User anstelle von User Daemon aus, um das Dateizugriffsproblem mit PHP zu beheben
Jetzt kann die von PHP erstellte Cache-Datei von Apache gelesen und bearbeitet werden, ohne dass ein Zugriffsberechtigungsfehler angezeigt wird.
quelle
Nach vielen Versuchen und Irrtümern mit Verzeichnisberechtigungen kam es zu einer Offenbarung ... auf der Partition der Festplatte war kein Platz mehr vorhanden. Ich wollte nur teilen, um sicherzustellen, dass niemand dumm genug ist, weiter nach der Lösung in die falsche Richtung zu suchen.
Unter Linux können
df -h
Sie die Festplattengröße und den freien Speicherplatz überprüfen.quelle
Dieses Problem, das tatsächlich von verschiedenen Benutzern verursacht wird, die
write/read
Dateien ablegen möchten, die jedoch abgelehnt wurden, führt zu unterschiedlichen Eigentumsverhältnissen. Vielleicht haben Sie als "root" Laravel installiert, bevor Sie sich auf Ihrer Site als "Laravel" -Benutzer anmelden, wobei "Laravel" der Standardbesitz ist. Dies ist also das eigentliche Problem hier. Wenn der Benutzer 'laravel' standardmäßig alle Dateien auf der Festplatte lesen / schreiben möchte, um dies zu verweigern, führt dies dazu, dass diese Datei den Besitz von 'root' hat.Um dieses Problem zu lösen, können Sie wie folgt vorgehen:
sudo chown -hR your-user-name /root /nameforlder
oder in meinem Fall
sudo chown -hR igmcoid /root /sublaravel
Fußnote:
root
als Name erster Besitzer, der zuvor installiert hatyour-user-name
als Standardbesitz, der tatsächlich in die Site schreibt / liest.namefolder
als Namensordner, in dem Sie den Besitz ändern möchten.quelle
Hoffe es hilft irgendwo irgendwie ...
quelle
Während der Arbeit unter Windows 10 mit Laragon und Laravel 4 schien es mir nicht möglich zu sein, die Berechtigungen manuell zu ändern, da die Ausführung von
chmod
Befehlen im eingebauten Laragon-Terminal keine Auswirkungen hatte.In diesem Terminal war es jedoch möglich, zum Speicherordner zu wechseln und die gewünschten Ordner wie folgt manuell hinzuzufügen:
Mit dem
cd
Befehl-im Terminal gelangen Sie zum Ordner (möglicherweise müssen Sie diesen Pfad an Ihre Dateistruktur anpassen). Mit demmkdir
Befehl-wird das Verzeichnis mit dem angegebenen Namen erstellt.Ich hatte keine Gelegenheit, diesen Ansatz in Laravel 5 zu testen, aber ich gehe davon aus, dass ein ähnlicher Ansatz funktionieren sollte.
Natürlich könnte es einen besseren Weg geben, aber zumindest war dies eine vernünftige Lösung für meine Situation (Behebung des Fehlers :)
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
.quelle
Ich habe mein Problem damit gelöst.
quelle
Ich habe versucht, den
777
Zugriff auf den Speicherordner zu gewähren , und es hat Arbeit für mich1) Gehen Sie (
/var/www/html
für mich) in Ihr Laravel-Stammverzeichnis und führen Sie den folgenden Befehl ausquelle