file_put_contents(meta/services.json): failed to open stream: Permission denied
Je suis nouveau sur Laravel. J'essayais d'ouvrir http://localhost/test/public/
et j'ai eu
D'erreur dans le gestionnaire d'exception.
J'ai googlé autour et a changé la permission de répertoire de stockage à l'aide de chmod -R 777 app/storage
mais en vain.
J'ai changé debug=>true
dans app.php
et visité la page et a reçu l'Erreur dans le gestionnaire d'exception:
Le flux ou le fichier "/var/www/html/test/app/stockage/logs/laravel.journal"
ne peut être ouvert: failed to open stream: Permission denied in
/var/www/html/test/bootstrap/compilé.php:8423
Puis j'ai changé les permissions du répertoire de stockage à l'aide de la commande chmod -R 644 app/storage
et le " Erreur dans le gestionnaire d'exception (' erreur a disparu et qu'une page est chargée. Mais là, j'obtiens ceci:
file_put_contents(/var/www/html/laravel/app/stockage/meta/services.json):
failed to open stream: Permission denied
- ressemble permition question à nouveau, chmod récursivement tous les répertoires d'application
- Je pense que je l'ai déjà fait avec un chmod -R 777/app / de stockage. N'ai-je pas? Et tous les répertoires à l'intérieur de l'app a drwxrwxrwx autorisation.
- Essayez:
php artisan cache:clear
puischmod -R 777 app/storage
enfinphp artisan dump-autoload
- Il a travaillé. Ça va être vraiment utile si vous pouvez expliquer quel était le problème.
- Il est difficile de savoir ce qui a été à l'origine de ce, probablement une sorte de cache qui a été créé avec l'erreur et y resta jusqu'à ce que vous nettoyez tous les cache. Laravel aussi avoir des problèmes avec les nouvelles installations et nécessite de re-dump l'autoload
- vsmoraes commentaire était correct cependant au lieu de 'php artisan de vidage-autoload' doit être 'compositeur de vidage-autoload'
- Veuillez consulter ce lien et de faire de la permission et du niveau du groupe. entrez description du lien ici
- dans laravel 5.6 après php artisan cache:clear vous devez exécuter la commande chmod -R 777 de stockage et c'est fini
Vous devez vous connecter pour publier un commentaire.
Suggestion de vsmoraes fonctionné pour moi:
Laravel >= 5.4
Laravel < 5.4
REMARQUE: NE PAS FAIRE SUR N'IMPORTE QUEL SERVEUR DISTANT (DEV OU DE LA PRODUCTION)
Quand j'ai posé cette question, c'était un problème sur mon localhost, exécute dans une Machine Virtuelle. J'ai donc pensé que la configuration d'un 777 était assez sûr, cependant, les gens ont raison quand ils disent que vous devriez chercher une solution différente. Essayez 775 première
php artisan cache:clear
, puischmod -R 777 storage
, puiscomposer dump-autoload
php artisan cache:clear
puischmod -R 777 storage/
puiscomposer dump-autoload
chmod -R 777 storage
au lieuphp artisan cache:clear
est la réponse correcte. Puissudo chmod -R ug+rw storage
donne les autorisations correctes pour moi, sans donnerothers
en lecture/écriture ou en particulier d'exécuter des privilèges.777
n'est pas Laravel spécifiques, mais les processus de pensée pour Laravel développeurs est de: "faire le travail MAINTENANT, je ne fais pas attention à la manière de", tout comme777
). En règle générale, ne jamais, jamais, rien que777
pour obtenir quelque chose à travailler. COMPRENDRE votre serveur et les utilisateurs/rôles et définir en conséquence; ne pas entailler à elle. Vos clients vous font confiance pour faire de ce droit.777
est une mauvaise idée et symptomatique d'autres problèmes que vous devez résoudre.sudo chmod -R 777 app/storage
Laravel
m'a appris que rien de ce que vous dites, et je pense que ce que vous dites n'est pas pertinent pourLaravel
al tous les.Pour les googlers qui a été confronté à ce problème avec Laravel 5.
C'est un problème d'autorisation causée par différents utilisateurs d'essayer d'écrire dans le même fichier journal à l'intérieur de la
storage/logs
dossier avec des autorisations différentes.Ce qui se passe est votre laravel config est probablement le programme d'installation pour les erreurs du journal quotidien et donc de 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 ouwww-data
sur les systèmes *NIX, alors le problème vient quand vous pourriez avoir exécuté certains artisans commandes et a obtenu quelques erreurs, de sorte que l'artisan va écrire ce fichier, mais avec un autre utilisateur du fait de PHP sur terminal server est exécuté par un utilisateur différent de votre identifiant de connexion, vous pouvez le vérifier en exécutant cette commande:Si votre login de l'utilisateur créé que le fichier de log de votre serveur web, vous ne serez pas en mesure d'écrire des erreurs et vice-versa, parce que laravel écrit les fichiers journaux avec
655
autorisations par défaut qui n'autorise le propriétaire à écrire.Pour résoudre ce temporaire, vous devez manuellement accorder des autorisations pour le groupe
664
pour ce fichier sorte la fois votre login de l'utilisateur et le serveur web de l'utilisateur peut écrire dans ce fichier journal.Pour éviter ce problème de façon permanente, vous souhaitez mai à l'installation d'une des autorisations appropriées lorsqu'un nouveau fichier est créer au sein de la
storage/logs
dir par hérite les autorisations du répertoire de cette réponse https://unix.stackexchange.com/a/115632 peut vous aider à aborder avec qui.Pour tout le monde à l'aide de Laravel 5, Homestead et Mac, essayez ceci:
bootstrap/cache/compiled.php
a été d'essayer d'écrire dans ce répertoire, mais il n'existait pas et fini par jeter une erreur de permission. Je vous remercie.Vous ne devriez pas donner 777 autorisations. C'est un risque pour la sécurité.
Pour les utilisateurs d'Ubuntu, dans Laravel 5, je suggérons de changer de propriétaire pour le répertoire de stockage de manière récursive:
Essayer de le suivre:
Dans Ubuntu en fonction des systèmes, www-data est l'utilisateur apache.
chmod 777
réponses. Merci~chmod 777
est un vrai cauchemar.chmod 777
conséquences?quelques fois SELINUX la cause de ce problème;
vous pouvez désactiver selinux avec cette commande.
Problème résolu
cela permet à l'autorisation d'écriture sur l'app , cadre, journaux Espère que cela Aidera
Pour les utilisateurs, la solution est:
(dans vagrant) php artisan cache:clear
(en dehors de vagrant) chmod -R 777/app /stockage
(dans vagrant) compositeur de vidage-autoload
De s'assurer que vous chmod dans votre environnement local et pas à l'intérieur de l'errance est important ici!
JAMAIS LUI DONNER LA PERMISSION 777!
allez dans le répertoire de la laravel projet sur votre terminal et écrire:
De cette façon, vous créez votre utilisateur le propriétaire et d'accorder des privilèges:
1 Exécuter, 2 Écrire, 4 Lire
1+2+4 = 7 moyens (rwx)
2+4 = 6 moyens (rw)
enfin, pour l'accès au stockage, ug+rwx signifie que vous donnez à l'utilisateur et de groupe des 7
Essayer de nouveau avec
chmod -R 755 /var/www/html/test/app/storage
. Utiliser sudo pourOperation not permitted
en chmod. L'utilisation, Vérifier propriétaire la permission si encore l'erreur.Comme par Laravel 5.4 quelle est la dernière que j'écris ceci, si vous avez un problème de ce genre, vous nie pour modifier les autorisations.
NE PAS ÉCOUTER QUELQU'UN QUI VOUS DIT DE DÉFINIR 777 POUR N'IMPORTE QUEL RÉPERTOIRE.
Il a un problème de sécurité.
Modifier les autorisations de dossier de stockage comme ce
Changement de bootstrap autorisation de dossier comme ceci
Maintenant s'il vous plaît assurez-vous que vous exécutez les deux commandes à partir de votre répertoire d'application. Vous ne serez pas confrontés à des problèmes dans le futur en matière d'autorisation. 775 ne pas compromettre la sécurité de votre machine.
Suggèrent l'autorisation correcte, si pour Apache,
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 l'explication détaillée ici.
POUR toute PERSONNE qui EXÉCUTE UN système d'exploitation AVEC SELINUX: La bonne façon d'autoriser httpd à écrire à la laravel dossier de stockage est:
Puis appliquer les modifications immédiatement:
SELinux peut être une douleur à traiter, mais si il est présent alors je vous CONSEILLE FORTEMENT de vous apprendre plutôt que de l'ignorer totalement.
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
J'ai eu le même problème et les étapes ci-dessous m'a aidé à résoudre le problème.
<?php echo exec('whoami'); ?>
Et exécutez le fichier depuis le navigateur web. Il serait donner à l'utilisateur apache. Dans mon cas, c'est ec2-utilisateur comme je l'ai été en utilisant aws avec une tâche cron dans /etc/cron.d/. Il peut être différent de l'utilisateur pour les autres.
sudo chown -R ec2-user:<usergroup> /app-path/public
Vous avez besoin d'identifier et d'utiliser le droit "utilisateur" et "groupe d'utilisateurs" ici.
Xampp pour utiliser:
Toutes les fois que je change app.php je reçois un refus d'autorisation d'écriture bootstrap/cache/services.json, donc je l'ai fait pour résoudre le problème:
résolu ce problème pour moi
Si vous utilisez laradock, essayez
chown -R laradock:www-data ./storage
dans votre espace de travail contenantDans mon cas, la solution a été de changer la permission de
app/storage/framework/views
etapp/storage/logs
répertoires.La définition d'autorisation de 777 est certainement terrible idée!
... mais
Si vous obtenez l'autorisation d'erreur lié à "stockage" dossier c'est ce qui a fonctionné pour moi:
Si quelqu'un d'autre se heurte à un problème similaire avec fopen autorisations de fichier d'erreur, mais il est assez sage pour ne pas aveuglément chmod 777, voici ma suggestion.
Vérifier la commande que vous utilisez pour les autorisations qu'apache doit:
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 apache/www-data a besoin d'au moins une autorisation de lecture sur ce fichier, si le fichier est créé par laravel il va avoir l'autorisation de lecture déjà.
Si pour une raison quelconque vous avez d'écrire dans le fichier:
Alors assurez-vous que apache a aussi des autorisations d'écriture sur le fichier.
http://php.net/manual/en/function.fopen.php
Il suffit de commencer votre serveur à l'aide de
artisian
php artisian serve
Ensuite accéder à votre projet à partir de l'URL spécifiée:
J'ai le même problème lors de l'exécution de l'errance sur mac. résolu le problème en changeant l'utilisateur d'Apache serveur en https.fichier conf:
Exécuter apache avec php utilisateur au lieu de l'utilisateur daemon pour résoudre d'accès au fichier de problème avec php
maintenant, php créé cache de fichier peut être lu et modifié par apache, sans montrer aucune autorisation d'accès d'erreur.
J'ai eu un problème similaire. (Autorisation refusée alors que les autorisations d'où configuré correctement) avec Laravel 5.2 et 5.5
Le problème était que SELinux est activé qui empêchent Apache pour écrire des fichiers, même avec 777 mode. Voir Résoudre de réponse de 500 Laravel (non Interceptée UnexpectedValueException: Laravel.le journal). pour la question et la réponse.
Peut-être ce qui 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 a pas d'espace à gauche 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.
Dans Linux, vous pouvez utiliser
df -h
pour vérifier votre taille du disque et de l'espace libre.Cette question en fait causée par des utilisateurs différents qui veut
write/read
fichier, mais il a nié l'origine de différentes de la propriété. peut-être que vous en tant que 'root' installé laravel avant, alors vous connecter à votre site comme "laravel' utilisateur 'laravel' la valeur par défaut de la propriété, de sorte que ce est le vrai problème ici. Ainsi, lorsque l'utilisateur 'laravel' voulez-vous de lecture/écriture de tous les fichiers dans le disque en tant que par défaut, pour être refusée, à cause de 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
que d'abord le nom de la propriété qui a installé avantyour-user-name
que la valeur par défaut de la propriété qui fait écrire/lire dans le site.namefolder
comme nom de dossier que vous voulez modifier la propriété.Espère qu'il contribue quelque part, en quelque sorte...
Tout en travaillant sur Windows 10 avec Laragon et Laravel 4, il me semblait qu'il n'y avait aucun moyen de modifier les autorisations manuellement, depuis l'exécution de
chmod
-les commandes dans le Laragon-en-haut-terminal n'a eu aucun effet.Toutefois, il était possible dans ce terminal, aller dans le dossier de stockage et ajouter manuellement les dossiers comme ceci:
La
cd
-commande dans le terminal, vous amène à le dossier (vous devrez peut-être régler ce chemin pour l'adapter à la structure de votre fichier).Le
mkdir
-commande va créer le répertoire avec le nom donné.Je n'ai pas eu l'occasion de tester cette approche dans Laravel 5, mais je pense qu'une approche similaire devrait fonctionner.
Bien sûr, il pourrait y avoir une meilleure façon, mais au moins c'était une solution raisonnable pour ma situation (fixation de l'erreur:
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
).Pour LARAVEL 5, essayez de créer cache, sessions et vues dossiers de stockage/cadre avec autorisation 777.
J'ai essayé de donner le
777
accès au dossier de stockage et de il a du travail pour moi1) allez à votre laravel répertoire racine , (
/var/www/html
pour moi) et exécutez la commande suivante