web-dev-qa-db-de.com

Fehlerbehebung: laravel.log konnte nicht geöffnet werden?

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. 

Permissions

82
FRR

Wenn also jemand anderes dieses Problem hat, tun Sie Folgendes.

  1. Raus aus der VM
  2. Wechseln Sie über die Konsole zu Ihrem synchronisierten Ordner (Vagrant).
  3. $ 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"]
43
FRR

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)'

165
Hamid Parchami

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

22
Daniel Dewhurst

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 
10

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

9
Davron Achilov

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
4

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

3
Turan Zamanlı

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.

3
Daniel Santos

versuche dies

  1. cd/var/www/html 
  2. setenforce 0
  3. dienst httpd neu starten
2

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:

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

2
Pratik

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)

2
s_user

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.

1
Patrick.SE

(on Ubuntu ): Kann in 2 einfachen Schritten gelöst werden:

$ Sudo chmod -R 777 storage 

Und

$ Sudo service Apache2 restart
1
rust

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 

 enter image description here

Ändern Sie die Berechtigungen mit dem folgenden Code

Sudo chmod -R 777 storage

Dann können Ihre Dateieigenschaften sein 

 enter image description here

Dann überprüfen Sie Ihre Einstellungen und führen Sie den Laravel-Befehl aus.

0

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
0
HamidNE

Wenn Ihr Webserver nginx ist, können Sie dies versuchen

chown -R nginx:nginx storage
chown -R nginx:nginx bootstrap/cache
0

In meinem speziellen Fall hatte ich eine Konfigurationsdatei generiert und im bootstrap/cache/-Verzeichnis zwischengespeichert. 

  1. Entfernen Sie alle generierten zwischengespeicherten Dateien: rm bootstrap/cache/*.php
  2. 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
0

Hatte dieses Problem und fand es und löste es.

 enter image description here

0
user2848911

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".

0
Junaid Masood

Du könntest es tun:

chcon -R -t httpd_sys_rw_content_t storage
0
Leandro Gorriz

Dieser Fehler kann durch Deaktivieren von Linux behoben werden.

Überprüfen Sie, ob es aktiviert wurde

sestatus

Sie versuchen..

setenforce 0

0
orxanzadeh