web-dev-qa-db-fra.com

file_put_contents permission refusée

J'essaie d'écrire une requête dans un fichier pour le débogage. Le fichier est en database/execute.php. Le fichier dans lequel je veux écrire est database/queries.php.

J'essaie d'utiliser file_put_contents('queries.txt', $query)

Mais j'obtiens 

contenu_put_fichier (queries.txt) [function.file-put-contents]: Impossible d'ouvrir le flux: Permission nié

J'ai le fichier queries.txt chmod'd à 777, quel pourrait être le problème?

79
Hailwood

Essayez d’ajuster les autorisations du répertoire.

depuis un terminal, lancez chmod 777 database (à partir du répertoire contenant le dossier de la base de données)

Apache et personne n’auront accès à ce répertoire s’il est correctement chmodé.

L'autre chose à faire est d'écho "getcwd ()". Cela vous montrera le répertoire en cours, et si ce n'est pas '/something.../database/' alors vous devrez changer 'query.txt' en chemin complet pour votre serveur.

63
Jason

L'autre option

est-ce que vous pouvez faire Apache (www-data), le propriétaire du dossier

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

cela devrait faire fonctionner file_put_contents maintenant. Mais pour plus de sécurité, vous devez également définir les autorisations comme ci-dessous. 

find /var/www -type d -print0 | xargs -0 chmod 0755 # folder
find /var/www -type f -print0 | xargs -0 chmod 0644 # files
  • changez /var/www dans le dossier racine de vos fichiers php
12
azerafati

Réalisez que c'est assez vieux maintenant, mais il n'est pas nécessaire d'écrire manuellement les requêtes dans un fichier comme celui-ci. MySQL a un support de journalisation intégré, il vous suffit de l'activer dans votre environnement de développement.

Jetez un coup d’œil à la documentation du 'journal de requête général':

http://dev.mysql.com/doc/refman/5.1/en/query-log.html

7
Adam

Les gars, j'ai eu ce problème pendant 1 mois et j'ai tout fait mais je ne pouvais pas le réparer, mais maintenant je connais la solution. 

J'utilise un hébergement Linux partagé, quand mon administrateur a changé le php en 5.3, j'ai eu beaucoup d'erreur pour le code "file_put_contents". essayez de tester mon plan:

Dans votre hôte, créez un fichier comme mytest.php, insérez ce code et enregistrez-le:

<?php        mail('Your-EMail','Email-Title','Email-Message');        ?>

Ouvrez l'URL "www.votre-domaine.com/mytest.php" une fois, puis vérifiez votre courrier électronique. vous devriez avoir un email de votre hôte avec les informations que vous avez entrées dans mytest.php, vérifiez le nom de l'expéditeur. si c'est de Personne vous avez un problème avec "Autorisation refusée" car quelque chose n'est pas défini et si le nom de l'expéditeur est comme mon identifiant: [email protected] vous n'avez pas de problème.

Mon administrateur a changé le serveur et a installé l'hôte à nouveau, je pense et le problème a été résolu, informez votre administration de l'hôte de ce que je vous ai dit et peut-être trouveront-ils la réponse.

espérons que cela vous aide!

3
Hesam

Je sais que la question est très ancienne, mais je voulais ajouter la bonne solution avec quelques explications détaillées. Vous devrez exécuter deux instructions sur Ubuntu, comme des systèmes, puis cela fonctionnera comme un charme. 

Les autorisations sous Linux peuvent être représentées par trois chiffres. Le premier chiffre définit l'autorisation du propriétaire des fichiers. Le deuxième chiffre indique les autorisations d'un groupe d'utilisateurs spécifique. Le troisième chiffre définit les autorisations pour tous les utilisateurs qui ne sont ni le propriétaire ni le membre du groupe.

Le serveur Web est censé s'exécuter avec un identifiant membre du groupe. Le serveur Web ne doit jamais fonctionner avec le même identifiant que le propriétaire des fichiers et des répertoires. Dans Ubuntu, Apache est exécuté sous l’identifiant www-data. Cet identifiant doit être un membre du groupe pour lequel les autorisations sont spécifiées.

Pour attribuer les droits appropriés au répertoire dans lequel vous souhaitez modifier le contenu des fichiers, exécutez l'instruction:

find %DIR% -type d -exec chmod 770 {} \;

Cela impliquerait dans la question de l'OP que les autorisations pour le répertoire% ROOT%/database devraient être modifiées en conséquence. Il est donc important de ne pas avoir de fichiers dans ce répertoire qui ne doivent jamais être modifiés ou supprimés. Il est donc recommandé de créer un répertoire distinct pour les fichiers dont le contenu doit être modifié.

Lire des autorisations (4) pour un répertoire signifie pouvoir collecter tous les fichiers et répertoires avec leurs métadonnées dans un répertoire. Autorisations d'écriture (2) donne l'autorisation de modifier le contenu du répertoire. Cela implique l'ajout et la suppression de fichiers, la modification des autorisations, etc. L'autorisation d'exécution (1) signifie que vous avez le droit d'accéder à ce répertoire. Sans ce dernier point, il est impossible d'aller plus loin dans le répertoire. Le serveur Web a besoin d'autorisations de lecture, d'écriture et d'exécution lorsque le contenu d'un fichier doit être modifié. Pour cela, le groupe a besoin du chiffre 7.

La deuxième déclaration concerne la question du PO:

find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;

Etre capable de lire et d'écrire un document est requis, mais il n'est pas nécessaire d'exécuter le fichier. Le 7 est donné au propriétaire des fichiers, le 6 au groupe. Le serveur Web n'a pas besoin de l'autorisation pour exécuter le fichier afin de changer son contenu. Ces autorisations d'écriture ne doivent être accordées qu'aux fichiers de ce répertoire.

Tous les autres utilisateurs ne doivent recevoir aucune permission.

Pour les répertoires ne nécessitant pas de modifier ses fichiers, les autorisations de groupe de 5 suffisent . Documentation sur les autorisations et quelques exemples:

https://wiki.debian.org/Permissions

https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

http://www.linux.org/threads/file-permissions-chmod.4094/

3
Loek Bergman

La collecte d'informations à partir de ce lien stackoverflow-image save ne fonctionne pas avec chmod 777 et de l'utilisateur azerafati et Loek Bergman

si vous regardez dans le fichier/etc/Apache/envvars, vous verrez quelque chose comme:

export Apache_RUN_USER=www-data
export Apache_RUN_GROUP=www-data

Apache est exécuté sous le nom d'utilisateur 'www-data'

"0755" signifie que le propriétaire du fichier peut lire/écrire/exécuter, mais que le groupe et les autres utilisateurs ne peuvent pas écrire. Donc, dans votre terminal, cd dans le dossier contenant votre dossier 'images'. puis tapez:

find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
Sudo chown -R www-data:www-data images

vous devez d'abord modifier les modifications avant de changer de propriétaire . entrez votre mot de passe lorsque vous y êtes invité. cela fera de «www-data» le propriétaire du dossier images.

votre téléchargement devrait maintenant fonctionner.

3
Bruce Tong

eu le même problème; mon problème était que selinux était configuré pour être appliqué. 

Je continuais à avoir le message d'erreur «Impossible d'ouvrir le flux: autorisation refusée» même après avoir modifié le code 777 et vérifié que tous les dossiers parents avaient des droits d'exécution pour l'utilisateur Apache. Il s’est avéré que mon problème était que selinux était configuré pour être appliqué (je suis sur centos7), il s’agit d’un devbox, je l’ai donc désactivé. 

0
DaveS

Pour toute personne utilisant Ubuntu et recevant cette erreur lors du chargement de la page localement, mais pas sur un service d'hébergement Web,

Je viens de corriger cela en ouvrant Nautilus (Sudo nautilus) et en faisant un clic droit sur le fichier que vous essayez d'ouvrir, cliquez sur Propriétés> Paramètres> et en donnant en lecture-écriture à 'tout le monde'

0
d-_-b

Si vous extrayez de git de local à serveur, vous devrez parfois vider le cache en raison des fichiers de vue qu'il est chargé avec lui/ou d'autres fichiers mis en cache.

php artisan cache:clear

Parfois, le problème peut survenir si votre application fonctionne avant le tirage git

0
Deepesh Thapa

Cela peut être résolu en résolution avec les étapes suivantes:

1. $ php artisan cache:clear

2. $ Sudo chmod -R 777 storage

3. $ composer dump-autoload

J'espère que ça aide

0
rust