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:
Comment puis-je me débarrasser de l'erreur?
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
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
.
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
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
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
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
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.
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é!
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.
utilisez ceci
chcon -R -t httpd_sys_rw_content_t stockage