Ich bin bei Laravel ziemlich neu und versuche mein erstes Projekt zu erstellen. aus irgendeinem Grund bekomme ich diesen Fehler immer wieder (ich habe noch nicht einmal mit der Codierung 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
hat überhaupt nicht geholfen.
Wenn also jemand anderes dieses Problem hat, tun Sie Folgendes.
$ Sudo chmod -R 777 app/storage
Obwohl ich das Projekt innerhalb von VM mit dem Benutzer VM erstellt habe, gehörte der Ordner dem Benutzer auf dem realen Computer. Beim Versuch, chmod 777 zu machen, bekam ich chmod 775.
Jetzt geht es.
Danke an alle, die mir geholfen haben, diese Sache zu verstehen
BEARBEITEN:
Eigentlich funktionierte es nicht, es gab mir immer noch ein "Erlaubnis verweigert" Problem.
Ich habe mein Vagrantfile folgendermaßen modifiziert:
config.vm.synced_folder "./app","/var/www/", create:true,
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
Niemals ein Verzeichnis auf 777 setzen. Sie sollten den Verzeichnisbesitz ändern. Stellen Sie 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:
Sudo chown -R $USER:www-data storage
Sudo chown -R $USER:www-data bootstrap/cache
versuchen Sie dann Folgendes, um die Verzeichnisberechtigung festzulegen:
chmod -R 775 storage
chmod -R 775 bootstrap/cache
pdate:
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)'
Manchmal müssen wir mehr tun, weil
chmod -R 775 storage
Meint
7 - Owner can write
7 - Group can write
5 - Others cannot write!
Wenn Ihr Webserver nicht als Vagrant ausgeführt wird, kann er nicht darauf schreiben. Sie haben also zwei Möglichkeiten:
chmod -R 777 storage
oder ändern Sie die Gruppe in Ihren Webserver-Benutzer, vorausgesetzt es ist www-data
:
chown -R vagrant:www-data storage
Sie müssen die Berechtigungen von storage
und bootstrap/cache
anpassen.
cd
in Ihr Laravel-Projekt. Sudo chmod -R 777 storage
Sudo chmod -R 777 bootstrap/cache
Je nachdem, wie Ihr Webserver eingerichtet ist, können Sie möglicherweise Ihre Berechtigungen genauer festlegen und sie nur Ihrem Webserverbenutzer erteilen. Google WEB SERVER NAME Laravel file permissions
für weitere Informationen.
Zum Zeitpunkt des Schreibens ist dies für Laravel 5.4
Führen Sie die folgenden Befehle aus, und Sie können Sudo
beim Start des Befehls hinzufügen, hängt von Ihrem System ab:
chmod -R 775 storage/framework
chmod -R 775 storage/logs
chmod -R 775 bootstrap/cache
Zu composer.json
hinzufügen
"scripts": {
"post-install-cmd": [
"chgrp -R www-data storage bootstrap/cache",
"chmod -R ug+rwx storage bootstrap/cache"
]
}
Nach composer install
Für diesen fehler:
Fehler im Ausnahmehandler: Der Stream oder die Datei "/var/www/laravel/app/storage/logs/laravel.log" konnte nicht geöffnet werden: Fehler beim Öffnen des Streams: Die Berechtigung wurde in/var/www/laravel/bootstrap/kompiliert .php: 8423
verwenden Sie diesen Befehl im Terminal:
Sudo chmod -R 777 storage
Es kann auch SELinux sein. (Centos, RedHat)
Status von SElinux am Terminal ermitteln:
$ sestatus
Wenn der Status aktiviert ist, schreiben Sie den Befehl zum Deaktivieren von SElinux
$ setenforce Permissive
Vielen Dank
Für alle Centos 7-Benutzer in einem Laravel-Kontext müssen Sie Selinux nicht deaktivieren. Führen Sie einfach die folgenden Befehle aus:
yum install policycoreutils-python -y # might not be necessary, try the below first
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?" # add a new httpd read write content to sellinux for the specific folder, -m for modify
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?" # same as the above for b/cache
restorecon -Rv /var/www/html/ # this command is very important to, it's like a restart to apply the new rules
Stellen Sie abschließend sicher, dass alle Hosts, IPS und virtuellen Hosts für den Remotezugriff korrekt sind.
Selinux soll den Zugriff auch für Root-Benutzer einschränken, so dass möglicherweise nur auf das Notwendigste zugegriffen werden kann, zumindest auf einen allgemeinen Überblick. Es ist zusätzliche Sicherheit. Das Deaktivieren ist keine bewährte Methode. Es gibt viele Links, über die Selinux zu lernen ist, aber dafür Fall ist es nicht einmal erforderlich.
versuche dies
In Laravel sollten Sie die Zugriffssteuerungsliste für das Verzeichnis storage
und cache
festlegen, damit der Webserver-Benutzer das Verzeichnis lesen und schreiben kann. Öffnen Sie ein neues Terminal und führen Sie Folgendes aus:
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
Sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
Sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX bootstrap/cache storage/
Verweise:
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/Rahmen Die oben genannten Ordner 775 oder 765 funktionierten nicht für mein Projekt
chmod -R 775 bootstrap/cache
Der Besitz des Projektordners sollte auch wie folgt sein (aktueller Benutzer) :( Webserver-Benutzer)
Ich war nicht sehr 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 lasse nginx laufen, aber die Prinzipien gelten überall):
$> Sudo vim /etc/nginx/nginx.conf
user <my_user> #inside nginx.conf
service nginx reload
Anschließend erstellte ich eine weitere index.php
-Datei unter dem public/
-Ordner, um herauszufinden, wer meine PHP-fpm-Version ausführte und wo ich das ändern würde:
<?php
phpinfo();
?>
Beim Neuladen der Seite habe ich herausgefunden, dass www-data
der Benutzer war (unter dem Umgebungsabschnitt). Ich fand auch heraus, dass ich php 7.1 laufen ließ. Ich habe den Benutzer geändert:
$> Sudo vim /etc/php/7.0/fpm/pool.d/www.conf
#Look for www-data or the following variables: user, group, listen.user, listen.group.
Zum Schluss habe ich folgenden Berechtigungen für Ordner erteilt:
Sudo chmod -R 775 ./storage/
Jetzt stellte ich sicher, dass ich der Besitzer der Ordner war.
ls -al
Wenn Sie den Server und die PHP-Fpm-Benutzer auf sich selbst einstellen und die Ordner beispielsweise root gehören, wird dieses Problem weiterhin auftreten. Dies kann passieren, wenn Sie einen Sudo laravel new <project>
als root angegeben haben. Stellen Sie in diesem Fall sicher, dass Sie in Ihrem Projekt einen rekursiven chown
-Befehl verwenden, um die user:group
-Einstellungen zu ändern. In den meisten Standardfällen ist www-data
die Haupteinstellung für den Server und php. In diesem Fall müssen Sie sicherstellen, dass der Ordner nicht außerhalb der Reichweite von www-data
liegt.
Mein Projekt ist in meinem Home-Verzeichnis eingerichtet. Unter Ubuntu 16.04 und Laravel 5.5.
(on Ubuntu ): Kann in 2 einfachen Schritten gelöst werden:
$ Sudo chmod -R 777 storage
Und
$ Sudo service Apache2 restart
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
Sudo chmod -R 777 storage
Dann können Ihre Dateieigenschaften sein
Dann überprüfen Sie Ihre Einstellungen und führen Sie den Laravel-Befehl aus.
Mein Problem mit diesem Befehl in Centos 7.6 Server wurde behoben
chcon -R -t httpd_sys_content_t $SITE_PATH
chcon -R -t httpd_sys_rw_content_t $SITE_PATH
Wenn Ihr Webserver nginx
ist, können Sie dies versuchen
chown -R nginx:nginx storage
chown -R nginx:nginx bootstrap/cache
In meinem speziellen Fall hatte ich eine Konfigurationsdatei generiert und im bootstrap/cache/
-Verzeichnis zwischengespeichert.
rm bootstrap/cache/*.php
Erstellen Sie eine neue laravel.log
-Datei und wenden Sie die Aktualisierung der Berechtigungen für die Datei an, indem Sie Folgendes verwenden:
chmod -R 775 storage
Für Windows-Benutzer
1: Klicken Sie auf Start, geben Sie INetMgr.exe ein und klicken Sie dann auf Eingabe. Wenn Sie dazu aufgefordert werden, klicken Sie auf Weiter, um Ihre Berechtigungen zu erhöhen.
2: Klicken Sie im Bereich Verbindungen auf die Schaltfläche + neben dem Namen Ihres Computers.
3: Doppelklicken Sie im IIS Manager auf die Site, die Sie verwalten möchten.
4: Doppelklicken Sie in der Ansicht Features auf Authentifizierung.
5: Wählen Sie Anonyme Authentifizierung aus und klicken Sie dann im Aktionsbereich auf Bearbeiten.
6: Klicken Sie im Dialogfeld Anmeldeinformationen für anonyme Authentifizierung bearbeiten auf die Option Bestimmter Benutzer und dann auf Festlegen.
7: Geben Sie im Dialogfeld "Anmeldeinformationen festlegen" den gewünschten Benutzernamen und das Kennwort ein und klicken Sie auf "OK".
Du könntest es tun:
chcon -R -t httpd_sys_rw_content_t storage
Dieser Fehler kann durch Deaktivieren von Linux behoben werden.
Überprüfen Sie, ob es aktiviert wurde
sestatus
Sie versuchen..
setenforce 0