Je suis nouveau à Laravel. J'essayais d'ouvrir http://localhost/test/public/
et j'ai obtenu
Erreur dans le gestionnaire d'exceptions.
J'ai cherché sur Google et modifié l'autorisation du répertoire de stockage en utilisant 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/storage/logs/laravel.log" n'a pas pu être ouvert: échec de l'ouverture du flux: autorisation refusée dans / var / www / html / test / bootstrap / compiled. php: 8423
Ensuite, j'ai changé les autorisations du répertoire de stockage à l'aide de la commande chmod -R 644 app/storage
et l'erreur `` Erreur dans le gestionnaire d'exceptions '' a disparu et une page est chargée. Mais là-dedans, j'obtiens ceci:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): échec de l'ouverture du flux: autorisation refusée
php artisan cache:clear
puischmod -R 777 app/storage
enfinphp artisan dump-autoload
Réponses:
La suggestion de vsmoraes a fonctionné pour moi:
Laravel> = 5,4
Laravel <5,4
REMARQUE: NE FAITES PAS CELA SUR UN SERVEUR À DISTANCE (DEV OU PRODUCTION)
Quand j'ai posé cette question, c'était un problème sur mon hôte local, fonctionnant dans une machine virtuelle. J'ai donc pensé que la configuration d'un 777 était suffisamment sûre, mais les gens ont raison quand ils disent que vous devriez chercher une solution différente. Essayez d'abord 775
la source
php artisan cache:clear
puischmod -R 777 storage
, et puiscomposer dump-autoload
chmod -R 777 storage
placephp artisan cache:clear
est la bonne réponse. Puissudo chmod -R ug+rw storage
donne les permissions correctes pour moi, sans donner deothers
777
n'est pas spécifique à Laravel, mais le processus de réflexion pour les développeurs Laravel est: "faites que ça marche MAINTENANT, je m'en fiche de savoir comment", juste comme777
). En règle générale, ne définissez jamais, jamais quoi que ce soit777
pour que quelque chose fonctionne. COMPRENEZ votre serveur et vos utilisateurs / rôles et définissez-les en conséquence; ne le piratez pas. Vos clients vous font confiance pour bien faire cela.Pour les googleurs qui ont été confrontés à ce problème avec Laravel 5.
Il s'agit d'un problème d'autorisation causé par différents utilisateurs essayant d'écrire dans le même fichier journal dans le
storage/logs
dossier avec des autorisations différentes.Ce qui se passe, c'est que votre configuration laravel est probablement configurée pour consigner les erreurs quotidiennement et que votre serveur Web (apache / nginx) peut donc créer ce fichier sous un utilisateur par défaut en fonction de votre environnement, cela peut être quelque chose comme
_www
sur OSX ouwww-data
sur les systèmes * NIX, puis le problème vient quand vous avez peut-être exécuté des commandes artisanales et obtenu des erreurs, donc l'artisan écrira ce fichier mais avec un utilisateur différent car 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 :Si votre utilisateur de connexion a créé ce fichier journal sur votre serveur Web, vous ne pourrez pas y écrire d'erreurs et vice-versa car laravel écrit des fichiers journaux avec des
655
autorisations par défaut qui permettent uniquement au propriétaire d'y écrire.Pour corriger ce problème temporaire, vous devez attribuer manuellement des autorisations au groupe
664
sur ce fichier afin que votre utilisateur de connexion et l'utilisateur du serveur Web puissent écrire dans ce fichier journal.Pour éviter ce problème de manière permanente, vous souhaiterez peut-être configurer des autorisations appropriées lorsqu'un nouveau fichier est créé dans
storage/logs
le répertoire en héritant des autorisations du répertoire. Cette réponse https://unix.stackexchange.com/a/115632 peut vous aider à résoudre le problème. cette.la source
Vous ne devez pas donner 777 autorisations. C'est un risque pour la sécurité. Pour les utilisateurs d'Ubuntu, dans Laravel 5, je suggère de changer de propriétaire pour le stockage de répertoire de manière récursive:
Essayez ce qui suit:
Dans les systèmes basés sur Ubuntu, www-data est un utilisateur apache.
la source
chmod 777
réponses. Merci ~chmod 777
est un cauchemar complet.chmod 777
conséquences?Pour tous ceux qui utilisent Laravel 5, Homestead et Mac, essayez ceci:
la source
bootstrap/cache/compiled.php
j'essayais d'écrire dans ce répertoire, mais il n'existait pas et a fini par générer une erreur d'autorisations. Je vous remercie.parfois, SELINUX a causé ce problème; vous pouvez désactiver selinux avec cette commande.
la source
Problème résolu
cela active l'autorisation d'écriture sur l'application, le framework, les journaux J'espère que cela aidera
la source
NE JAMAIS DONNER LA PERMISSION 777!
allez dans le répertoire du projet laravel sur votre terminal et écrivez:
De cette façon, vous rendez votre utilisateur propriétaire et donnez des privilèges:
1 Exécuter, 2 Ecrire, 4 Lire
1 + 2 + 4 = 7 signifie (rwx)
2 + 4 = 6 signifie (rw)
enfin, pour l'accès au stockage, ug + rwx signifie que vous donnez à l'utilisateur et au groupe un 7
la source
Pour les utilisateurs vagabonds, la solution est:
(in vagrant) php artisan cache: clear
(hors vagabond) chmod -R 777 app / stockage
(in vagrant) compositeur dump-autoload
Assurez-vous de vous installer dans votre environnement local et non dans un vagabond est important ici!
la source
Réessayez avec
chmod -R 755 /var/www/html/test/app/storage
. Utilisez avec sudo pourOperation not permitted
dans chmod. Utilisez Vérifier l'autorisation du propriétaire si l'erreur persiste.la source
Selon Laravel 5.4, qui est le dernier au moment où j'écris ceci, si vous rencontrez un problème comme celui-ci, vous devez changer l'autorisation. N'ÉCOUTEZ PERSONNE QUI VOUS INDIQUE DE RÉGLER 777 POUR TOUT RÉPERTOIRE. Il a un problème de sécurité. Modifiez l'autorisation du dossier de stockage comme ceci
Modifier l'autorisation du dossier d'amorçage comme ceci
Assurez-vous maintenant que vous exécutez les deux commandes à partir du répertoire de votre application. Vous ne rencontrerez pas de problèmes à l'avenir concernant l'autorisation. 775 ne compromet aucune sécurité de votre machine.
la source
Suggérer l'autorisation correcte, si pour Apache,
la source
Si vous avez Laravel 5 et recherchez une solution permanente,
php artisan
utilisez à la fois l' utilisation de la ligne de commande et le serveur Apache: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 .
la source
POUR TOUTE PERSONNE EXÉCUTER UN OS AVEC SELINUX: La manière correcte d'autoriser httpd à écrire dans le dossier de stockage laravel est:
Ensuite, pour appliquer les modifications immédiatement:
SELinux peut être difficile à gérer, mais s'il est présent, je vous conseille vivement de l'apprendre plutôt que de le contourner complètement.
la source
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'ont aidé à résoudre le problème.
<?php echo exec('whoami'); ?>
Et exécutez le fichier à partir du navigateur Web. Cela donnerait à l'utilisateur Apache. Dans mon cas, c'est ec2-user car j'utilisais le aws avec cronjob installé dans /etc/cron.d/. Cela pourrait être un utilisateur différent pour les autres.
sudo chown -R ec2-user:<usergroup> /app-path/public
Vous devez identifier et utiliser ici le bon "utilisateur" et le "groupe d'utilisateurs".
la source
Si vous utilisez Linux ou Mac, vous pouvez même exécuter
ssh terminal
. Vous pouvez utiliser le terminal pour exécuter cette commande,Si vous utilisez Windows, vous pouvez exécuter en utilisant
git bash
.Vous pouvez télécharger le formulaire git https://git-scm.com/downloads .
la source
Xampp à utiliser:
la source
Chaque fois que je change app.php, je reçois une autorisation refusée d'écrire bootstrap / cache / services.json, alors j'ai fait ceci pour le réparer:
la source
résolu ça pour moi
la source
Définir l'autorisation sur 777 est définitivement une idée terrible!
... mais
Si vous obtenez une erreur d'autorisation liée au dossier "stockage", c'est ce qui a fonctionné pour moi:
la source
Si vous utilisez laradock, essayez
chown -R laradock:www-data ./storage
dans votre conteneur d'espace de travailla source
Dans mon cas, la solution consistait à modifier les autorisations
app/storage/framework/views
et lesapp/storage/logs
répertoires.la source
Si quelqu'un d'autre rencontre un problème similaire avec une erreur d'autorisations de fichiers fopen, mais qu'il est assez sage de ne pas aveuglément chmod 777, voici ma suggestion.
Vérifiez la commande que vous utilisez pour les autorisations dont Apache a besoin:
Le «r» signifie ouvert en lecture seule, et si vous n'éditez pas le fichier, c'est comme cela que vous devriez le définir. Cela signifie qu'apache / www-data a besoin d'au moins une autorisation de lecture sur ce fichier, qui si le fichier est créé via laravel, il aura déjà l'autorisation de lecture.
Si pour une raison quelconque vous devez écrire dans le fichier:
Ensuite, assurez-vous qu'apache dispose également des autorisations d'écrire dans le fichier.
http://php.net/manual/en/function.fopen.php
la source
Démarrez simplement votre serveur en utilisant
artisian
php artisian serve
Accédez ensuite à votre projet à partir de l'URL spécifiée:
la source
J'ai le même problème lors de l'exécution de vagrant sur mac. a résolu le problème en changeant l'utilisateur du serveur Apache dans le fichier https.conf:
Exécutez apache sous l'utilisateur php au lieu du démon utilisateur pour résoudre le problème d'accès aux fichiers avec php
maintenant, le fichier de cache créé par php peut être lu et édité par apache sans afficher aucune erreur d'autorisation d'accès.
la source
Après de nombreux essais et erreurs avec les autorisations de répertoire, je me suis retrouvé avec une révélation ... il n'y avait plus d'espace sur la partition du disque. Je voulais juste partager pour s'assurer 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.la source
Ce problème est en fait causé par différents utilisateurs qui souhaitent
write/read
déposer un fichier mais qui le refusent entraînent une 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, c'est donc le vrai problème ici. Ainsi, lorsque l'utilisateur 'laravel' veut lire / écrire tous les fichiers du disque par défaut, pour être refusé, car ce fichier a la propriété de '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 du premier propriétaire qui a installé avantyour-user-name
comme propriété par défaut qui écrit / lit réellement sur le site.namefolder
en tant que dossier de noms que vous souhaitez modifier la propriété.la source
Espère que cela aide quelque part ...
la source
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, car l'exécution de
chmod
commandes dans le terminal intégré Laragon n'avait aucun effet.Cependant, il était possible dans ce terminal d'aller dans le dossier de stockage et d'ajouter manuellement les dossiers souhaités comme ceci:
La commande
cd
-dans le terminal vous amène au dossier (vous devrez peut-être ajuster ce chemin en fonction de votre structure de fichiers). lemkdir
commande-créera le répertoire avec le nom donné.Je n'ai pas eu l'occasion de tester cette approche dans Laravel 5, mais j'espère qu'une approche similaire devrait fonctionner.
Bien sûr, il pourrait y avoir un meilleur moyen, mais au moins c'était une solution de contournement raisonnable pour ma situation (corriger l'erreur :)
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
.la source
J'ai résolu mon problème en faisant cela.
la source
J'ai essayé de donner l'
777
accès au dossier de stockage et cela fonctionne pour moi1) allez dans votre répertoire racine laravel, (
/var/www/html
pour moi) et exécutez la commande suivantela source