web-dev-qa-db-fra.com

Laravel 5.2 n'a pas pu ouvrir laravel.log

Je sais qu'il y a beaucoup de questions sur ce sujet mais mes problèmes sont vraiment bizarres c'est pourquoi j'ai décidé de poster. J'ai cette erreur dans /var/logs/Apache/error.log

  [Tue Mar 01 07:26:51.435312 2016] [:error] [pid 8837] [client 127.0.0.1:37843] PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/personale/librarie-cor/storage/logs/laravel.log" could not be opened: 
failed to open stream: Permission denied' in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:87\nStack trace:
\n#0 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\\Handler\\StreamHandler->write(Array)
\n#1 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(289): Monolog\\Handler\\AbstractProcessingHandler->handle(Array)
\n#2 /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Logger.php(565): Monolog\\Logger->addRecord(400, Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#3 /var/www/personale/librarie-cor/vendor/laravel/framework/src/Illuminate/Log/Writer.php(202): Monolog\\Logger->error(Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
\n#4 /var/www/personale/librarie-cor in /var/www/personale/librarie-cor/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 87

Le truc c'est que je l'ai déjà fait chmod -R 777 storage/, voici une capture d'écran:

chmoded

Comment puis-je me débarrasser de l'erreur?

13
csanonymus

J'ai finalement trouvé une solution. Il semblerait que le problème soit lié au PSR-4 et aux classes d'importation automatique

Voici donc la solution pour toute autre personne ayant ce problème:

php artisan clear-compiled 
composer dump-autoload
php artisan optimize
php artisan cache:clear
2
csanonymus

TLDR;

Exécutez les commandes suivantes sur votre terminal

# Clear Laravel cache and the compiled classes
php artisan cache:clear
php artisan clear-compiled

# Change the storage and cache directories permission
Sudo chmod -R 777 storage
Sudo chmod -R 777 bootstrap/cache

# Regenerate the composer autoload file
composer dump-autoload

Explication plus approfondie

Cela se produit généralement car le serveur Web a besoin d'un accès en écriture aux répertoires storage et bootstrap/cache.

1. Vérifiez quel utilisateur est utilisé par le processus du serveur Web

Tout d'abord, assurez-vous que votre processus de serveur Web est exécuté par un compte avec des privilèges limités. Nginx et Apache créent et utilisent généralement automatiquement l'utilisateur et le groupe www-data Les moins privilégiés. Vous pouvez toujours utiliser la commande ps pour vérifier quel utilisateur est utilisé par le service en cours d'exécution:

ps aux | grep nginx

2. Définissez le propriétaire de votre répertoire de projet

Ensuite, assurez-vous que votre répertoire de projet Laravel appartient au même utilisateur et groupe qui exécute le processus de serveur Web. Supposons que votre serveur Web soit géré par www-data Et votre répertoire de projet est situé à /var/www/laravel, vous pouvez définir la propriété comme suit:

Sudo chown -R www-data:www-data /var/www/laravel

3. Accordez un accès en écriture aux répertoires storage et cache

Il s'agit de l'étape IMPORTANTE, assurez-vous d'accorder l'autorisation d'écriture aux répertoires storage et bootstrap/cache.

Sudo chmod -R 775 /var/www/laravel/storage
Sudo chmod -R 775 /var/www/laravel/bootstrap/cache

Ne fonctionne toujours pas?

Si les étapes ci-dessus ne fonctionnent toujours pas, vous pouvez essayer d'exécuter les commandes suivantes dans le shell:

# 1. Clear Laravel cache
php artisan cache:clear

# 2. Delete the compiled class
php artisan clear-compiled

# 3. Regenerate the composer autoload file
composer dump-autoload

Pourtant, cela ne fonctionne toujours pas?

Pour la dernière ressource, essayez de définir l'autorisation sur 777, Ce qui signifie que tous les utilisateurs auront la possibilité de lire et d'écrire dans les répertoires donnés.

Sudo chmod -R 777 /var/www/laravel/storage
Sudo chmod -R 777 /var/www/laravel/bootstrap/cache

J'espère que cette aide.

44

J'ai eu le même problème avec Centos7 ... J'ai tout essayé. Enfin, j'ai trouvé un article sur stackoverflow suggérant qu'il pourrait s'agir de selinux. J'ai désactivé selinux et cela a fonctionné!

11
jacobfogg

Si vous êtes dans Centos, désactivez l'application SELinux

exécuter la commande ci-dessous pour ce faire.

setenforce 0

Dans mon cas, cette solution a très bien fonctionné. J'espère que cela vous aidera.

Vous devriez essayer quelque chose comme ça-

php artisan cache:clear
php artisan clear-compiled

Sudo chmod -R 777 storage/ -R
composer dump-autoload

Vous pouvez aller à cette question pour plus de détails.

5
Abrar Jahin

utilisez ceci

chcon -R -t httpd_sys_rw_content_t stockage

2
karrar kazuya