contenu des fichiers mis (meta/services.JSON): n'a pas réussi à ouvrir le flux: Permission refusée
Je suis nouveau à Laravel. J'essayais d'ouvrir http://localhost/test/public/
et j'ai eu
erreur dans le gestionnaire d'exception.
j'ai cherché sur Google autour et changé la permission de répertoire de stockage en utilisant chmod -R 777 app/storage
mais en vain.
j'ai changé debug=>true
en app.php
et j'ai visité la page et J'ai eu une erreur dans le gestionnaire d'exception:
le flux ou le fichier "/var/www/html/test/app/stockage/logs/laravel.journal" n'a pas pu être ouvert: n'a pas ouvert le flux: Permission refusée dans /var/www/html/test/bootstrap/compilé.php: 8423
puis j'ai changé les permissions du répertoire de stockage en utilisant la commande chmod -R 644 app/storage
et l'erreur 'Erreur dans le gestionnaire d'exception' a disparu et une page est chargée. Mais là-dedans je reçois ceci:
file_put_contents(/var/www/html/laravel/app/stockage/meta/services.json): n'a pas ouvert le flux: Autorisation refusée
29 réponses
Suggestion de vsmoraes a travaillé pour moi:
Laravel >= 5,4
php artisan cache:clear
chmod -R 777 storage/
composer dump-autoload
Laravel < 5,4
php artisan cache:clear
chmod -R 777 app/storage
composer dump-autoload
pour les Googleurs qui ont été confrontés à ce problème avec Laravel 5.
il s'agit d'un problème de permission causé par des utilisateurs différents essayant d'écrire sur le même fichier journal dans le dossier storage/logs
avec des permissions différentes.
ce qui se passe est que votre config laravel est probablement configuré pour enregistrer les erreurs quotidiennement et donc votre serveur web (apache / nginx) pourrait créer ce fichier sous un utilisateur par défaut en fonction de votre environnement il peut être quelque chose comme _www
sur OSX ou www-data
sur les systèmes * NIX, puis le problème vient quand vous avez pu exécuter certaines commandes artisan et a obtenu quelques erreurs, de sorte que l'artisan écrira ce fichier, mais avec un utilisateur différent parce que PHP sur le terminal est exécuté par un utilisateur différent en fait votre utilisateur de connexion, vous pouvez le vérifier en exécutant cette commande:
php -i | grep USER
si votre login utilisateur créé ce fichier log votre serveur web ne sera pas en mesure d'écrire des erreurs et vice-versa parce que laravel écrit des fichiers journaux avec les permissions 655
par défaut, ce qui permet seulement au propriétaire d'y écrire.
pour corriger ce temporaire, vous devez donner manuellement les permissions pour le groupe 664
à ce fichier pour que votre utilisateur login et celui du serveur web puissent écrire dans ce fichier log.
pour éviter ce problème de façon permanente, vous pouvez configurer des permissions appropriées quand un nouveau fichier est créé dans le storage/logs
dir en héritant les permissions de l'annuaire cette réponse https://unix.stackexchange.com/a/115632 peut vous aider à aborder avec cela.
Pour tout le monde à l'aide de Laravel 5, Homestead et Mac, essayez ceci:
mkdir storage/framework/views
vous ne devez pas donner 777 permissions. C'est un risque pour la sécurité. Pour les utilisateurs Ubuntu, dans Laravel 5, Je sugest à changer recursively de propriétaire pour le stockage de répertoire:
Try the following:
sudo chown -R www-data:www-data storage
dans les systèmes basés sur Ubuntu, www-data est l'utilisateur apache.
parfois SELINUX causé ce problème; vous pouvez désactiver selinux avec cette commande.
sudo setenforce 0
Problème résolu
php artisan cache:clear
sudo chmod -R 777 vendor storage
cela permet la permission d'écriture de l'application, le cadre, les journaux espèrent que cela aidera
pour les utilisateurs vagabonds, la solution est:
(vagabond) php artisan cache:clear
(en dehors de vagrant) chmod -R 777/app / stockage
(in vagrant) compositeur dump-autoload
assurez-vous que vous chmod dans votre environnement local et pas à l'intérieur de vagrant est important ici!
réessayez avec chmod -R 755 /var/www/html/test/app/storage
. Utiliser avec sudo pour Operation not permitted
dans chmod. Utilisez la permission de Check owner si vous avez toujours l'erreur.
selon Laravel 5.4 qui est la dernière fois que j'écris ceci, si vous avez un problème comme celui-ci, vous devez changer la permission. N'ÉCOUTEZ PERSONNE QUI VOUS DIT DE DÉFINIR 777 POUR N'IMPORTE QUEL RÉPERTOIRE. Il a un problème de sécurité. Modifier la permission du dossier de stockage comme ceci
sudo chmod -R 775 storage
modifier la permission du dossier bootstrap comme ceci
sudo chmod -R 775 bootstrap/cache
maintenant s'il Vous Plaît assurez-vous que vous exécutez les deux commandes de votre répertoire d'application. Vous ne rencontrerez plus de problèmes à l'avenir en ce qui concerne la permission. 775 ne compromet pas la sécurité de votre machine.
Si vous avez Laravel 5 et à la recherche permanente de la solution , applicable à la fois php artisan
utilisation de lignes de commande et le serveur web Apache utilisez ceci:
sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
voir explication détaillée ici .
suggérez la permission correcte, Si pour Apache,
sudo chown -R apache:apache apppath/app/storage
NEVER GIVE IT PERMISSION 777!
allez à l'annuaire du projet laravel sur votre terminal et écrivez:
sudo chown -R your-user:www-data /path/to/your/laravel/project/
sudo find /same/path/ -type f -exec chmod 664 {} \;
sudo find /same/path/ -type d -exec chmod 775 {} \;
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
de cette façon vous faites votre utilisateur le propriétaire et donner des privilèges:
1 Exécuter, 2 écrire, 4 Lire
1+2+4 = 7 signifie (rwx)
2+4 = 6 signifie (rw)
enfin, pour l'accès au stockage, ug+rwx moyens vous donnez à l'utilisateur et au groupe un 7
pour quiconque exécute un OS avec SELINUX: la bonne façon de permettre à httpd d'écrire dans le dossier de stockage laravel est:
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
ensuite appliquer les changements immédiatement:
sudo restorecon -F -r '/path/to/www/storage'
SELinux peut être une douleur à traiter, mais si elle est présente alors je vous conseille fortement de l'apprendre plutôt que de contourner entièrement.
j'ai eu le même problème et les étapes ci-dessous m'a aidé à résoudre le problème.
- découvrez que l'utilisateur apache a créé un test.fichier php dans le dossier public avec le code
<?php echo exec('whoami'); ?>
et lancer le fichier à partir du navigateur web. Cela donnerait à l'utilisateur apache. Dans mon cas, c'est ec2-user car j'utilisais l'aws avec cronjob installé dans /etc/cron.d/. Il pourrait être un utilisateur différent pour d'autres.
- lancez la commande ci-dessous sur la ligne de commande.
sudo chown -R ec2-user:<usergroup> /app-path/public
vous devez identifier et utiliser le droit" Utilisateur "et" usergroup " ici.
Xampp à utiliser:
cd /Applications/XAMPP/htdocs
chmod -R 775 test/app/storage
si vous utilisez laradock, essayez chown -R laradock:www-data ./storage
dans votre espace de travail contenant
chaque fois que je change d'application.php j'obtiens une permission refusée en écrivant bootstrap/cache/services.json ainsi j'ai fait ceci pour le réparer:
chmod -R 777 bootstrap/cache/
dans mon cas, la solution était de changer la permission aux répertoires app/storage/framework/views
et app/storage/logs
.
si quelqu'un d'autre se heurte à un problème similaire avec une erreur de permissions de fichiers fopen, mais est assez sage de ne pas aveuglément chmod 777 voici ma suggestion.
Vérifiez la commande que vous utilisez pour les permissions dont apache a besoin:
fopen('filepath/filename.pdf', 'r');
Le " r " signifie ouvrir en lecture seule, et si vous n'êtes pas modifier le fichier, c'est ce que vous avez mis aussi. Cela signifie qu'apache/www-data a besoin d'au moins la permission de lire ce fichier, ce qui si le fichier est créé par laravel, il aura déjà la permission de lire.
si pour une raison quelconque vous devez écrire dans le fichier:
fopen('filepath/filename.pdf', 'r+');
ensuite, assurez-vous qu'apache a aussi les permissions d'écrire dans le fichier.
il suffit de démarrer votre serveur en utilisant artisian
php artisian serve
puis accédez à votre projet à partir de L'URL spécifiée:
j'ai le même problème avec vagrant sur mac. résolu le problème en changeant l'utilisateur d'Apache serveur en https.fichier conf:
# check user for php
[vagrant] ubuntu ~ $ php -i | grep USER
USER => ubuntu
$_SERVER['USER'] => ubuntu
[vagrant] ubuntu ~ $
exécuter apache sous l'utilisateur php au lieu de l'utilisateur daemon pour résoudre le problème d'accès au fichier avec php
# change default apache user from daemon to php user
sudo sed -i 's/User daemon/User ubuntu/g' /opt/lampp/etc/httpd.conf
sudo sed -i 's/Group daemon/Group ubuntu/g' /opt/lampp/etc/httpd.conf
maintenant, le fichier cache créé par php peut être lu et édité par apache sans afficher d'erreur d'autorisation d'accès.
j'ai eu un problème similaire. (Permission refusée alors que les permissions ont été configurées correctement) avec Laravel 5.2 et 5.5
le problème était que SELinux était activé, ce qui empêchait Apache d'écrire des fichiers même avec le mode 777. Voir Résoudre de réponse de 500 Laravel (non Interceptée UnexpectedValueException: Laravel.journal) pour la question et la réponse.
Peut-être que cela résout le problème pour vous aussi.
Après beaucoup d'essais et d'erreurs avec les autorisations du répertoire j'ai fini avec une épiphanie...il n'y avait plus d'espace sur la partition du disque. Je voulais juste partager à assurez-vous que personne d'autre n'est assez stupide pour continuer à chercher la solution dans la mauvaise direction.
sous Linux, vous pouvez utiliser df -h
pour vérifier la taille de votre disque et l'espace libre.
fixer la permission à 777 est certainement une idée terrible!
... mais
si vous obtenez une erreur de permission liée au dossier "stockage" c'est ce qui a fonctionné pour moi:
1) Mettre "storage" et ses sous-dossiers permission à 777 avec
sudo chmod -R 777 storage/
2) dans le navigateur aller à la page d'accueil de laravel laravel / public / (laravel créera les fichiers de stockage initial nécessaires)
3) retourner le coffre-fort 775 permission d'entreposage et ses sous-dossiers
sudo chmod -R 775 storage/
ce problème réellement causé par différents utilisateurs qui veut write/read
fichier, mais nié cause propriété différente. peut-être que vous avez installé laravel en tant que' root 'avant de vous connecter à votre site en tant qu'utilisateur' laravel 'où' laravel ' est la propriété par défaut, donc c'est le vrai problème ici. Donc, lorsque l'utilisateur 'laravel 'veut lire/écrire tous les fichiers sur le disque comme par défaut, pour être refusé, parce que ce fichier a la propriété par'root'.
Pour résoudre ce problème, vous pouvez suivre comme ceci:
sudo chown -hR your-user-name /root /nameforlder
ou dans mon cas
sudo chown -hR igmcoid /root /sublaravel
note de bas de page:
-
root
comme nom Premier propriétaire qui a installé avant -
your-user-name
comme propriété par défaut qui écrit/lit réellement dans le site. -
namefolder
comme dossier nom qui veut que vous changiez la propriété.
j'ai eu les mêmes erreurs dans mon projet...
Mais j'ai découvert que j'avais oublié de mettreenctype
dans mon formulaire.
<form method="#" action="#" enctype="multipart/form-data">
espère que ça aidera quelque part...
pour LARAVEL 5, essayez de créer cache , sessions et vues dossiers dans le stockage/cadre avec la permission 777.
j'ai essayé de donner au 777
l'accès au dossier de stockage et il a du travail pour moi
1) Allez dans votre répertoire racine laravel, ( /var/www/html
pour moi) et lancez la commande suivante
chmod 777 -R storage