web-dev-qa-db-fra.com

Laravel 5: Impossible d'ouvrir le fichier laravel.log: autorisation refusée

Pour vous arrêter dès le début, il n’ya pas de problème d’autorisation./storage est récursivement chmodded 777 et tout le dossier du projet est ordonné par Apache: apache

J'ai même renommé le fichier journal en ... vieux et Apache en a créé un nouveau ... s'il n'avait pas les droits d'écriture, il n'aurait pas été autorisé à le créer.

Fonctionnant sous la version 6.6 de CentOS (finale)

Déployé le projet depuis git, le Homestead travaille pour mon collègue.

Erreur complète:

[Lun. Mai 18 10:17:58 2015] [erreur] [client 86.124.208.14] PHP Fatal erreur: exception non capturée 'UnexpectedValueException' avec le message 'Le flux ou le fichier "/var/www/vhosts/mapper.pavementlayers.com/storage/logs/laravel-2015-05-18.log" Impossible d'ouvrir: échec de l'ouverture du flux: autorisation refusée 'dans /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:84\nStack trace:\n # 0 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(88): Monolog\Handler\StreamHandler-> write (Array)\n # 1 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\RotatingFileHandler-> write (Array)\n # 2 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Logger.php(265): Monolog\Handler\AbstractProcessingHandler-> handle (Array)\n # 3 /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Logger.php(543): Monolog\Logger-> addRecord (400, 'exception' Symf ... ', Array)\n # 4 /var/www/vhosts/mapper.pavementl in /var/www/vhosts/mapper.pavementlayers.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php à la ligne 84

13
ied3vil

Il est possible que SElinux empêche Apache de créer ce fichier.

Pour tester cela, vous pouvez désactiver SElinux temporairement avec la commande suivante:

setenforce 0

Cela placera SElinux en mode permissif. Cela signifie que vous recevez toujours un message d'erreur dans votre fichier journal SElinux mais que SElinux ne bloquera pas la commande.

Pour réactiver SElinux, vous pouvez taper:

setenforce 1

Ou redémarrez votre serveur CentOS.

Malheureusement, j'avais également des problèmes avec Laravel 5 sous CentOS et la cause en était SElinux . J'ai fini par désabonnement SElinux et je sais que ce n'est pas la bonne chose à faire, mais je n'ai pas eu le temps de le faire. faire travailler les deux ensemble pour le moment!


Mettre à jour

Donc, j'ai finalement eu le temps d'enquêter plus avant et j'ai fait travailler SELinux avec Laravel 5. Je viens de mettre à jour ce post pour les personnes susceptibles de rencontrer ce problème car désactiver SELinux n'est pas la meilleure stratégie mentionnée ci-dessus.

Trois choses doivent être faites:

  1. Les dossiers Storage et Bootstrap/Cache doivent avoir le bon contexte SELinux. Ceci peut être réalisé via les commandes suivantes.

    semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/<Laravel Site>/storage(/.*)?"
    
    semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/<Laravel Site>/bootstrap/cache(/.*)?"
    
  2. Le contexte SELinux doit être appliqué aux répertoires.

    restorecon -Rv "/var/www/<Laravel Site>/storage"
    
    restorecon -Rv "/var/www/<Laravel Site>/bootstrap/cache"
    
  3. L'utilisateur Apache doit disposer des droits pour créer des fichiers dans les deux répertoires. Ceci peut être réalisé via un ACL dans CentOS 7.

    setfacl -R -m u:Apache:rwX storage/
    
    setfacl -R -m u:Apache:rwX bootstrap/cache/
    

La dernière chose à faire est de réactiver SELinux.

39
Thomas Snijder

Essayez ces commandes pour laravel 5

$ php artisan cache:clear 

$ Sudo chmod -R 777 app/storage 

$ composer.phar dump-autoload

Cela se produit parce que laravel n’a pas l’autorisation d’écrire dans le fichier journal, du moins dans mon cas.

8
Mustafa Dwekat

Cela a fonctionné pour moi, Laravel 5.4 et plus

$ Sudo chmod -R 755 storage/

$ Sudo chown -R www-data storage/

$ Sudo chgrp -R www-data storage/

$ php artisan cache:clear

$ php artisan config:cache

$ composer dumpautoload

Toutes les étapes ne sont pas nécessaires.

2
ReesBo

Vous devez vous assurer que le dossier storage existe. Si vous déployez depuis git, assurez-vous que le dossier storage est suivi et créé automatiquement.

0
lowerends

pour centos 7 

   # ausearch -c 'httpd' --raw | audit2allow -M my-httpd
   # semodule -i my-httpd.pp
0
Leemarshn

ON Laravel 5.7

$ cd /var/www/html/$ Cache de l'artisan php: effacer Cache de l'application effacé!

0
Lasimin