Fichier contenu Autorisation refusée

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

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

Mais je suis

file_put_contents(requêtes.txt) [function.file-put-contents]: failed to open stream: Permission refusé

j'ai le queries.txt fichier chmod à 777, ce qui pourrait la question de l'être?

76
demandé sur hakre 2011-02-07 06:14:35

11 réponses

essayez d'ajuster les permissions du répertoire.

à partir d'un terminal, Lancez chmod 777 database (à partir du répertoire qui contient le dossier de la base de données)

apache et personne n'aura accès à ce répertoire s'il est chmodd ed correctement.

L'autre chose à faire est echo "getcwd()". Ceci vous montrera le répertoire courant, et si ce n'est pas '/quelque chose.../base de données/', alors vous aurez besoin de changement " de la requête.txt " pour le chemin d'accès complet pour votre serveur.

63
répondu Jason 2011-02-07 04:09:32

l'autre option

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

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

qui devrait faire fonctionner file_put_contents maintenant. Mais pour plus de sécurité, Vous feriez mieux de définir les permissions 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
  • changement /var/www dans le dossier racine de vos fichiers php
10
répondu azerafati 2017-05-23 14:42:29

Réaliser c'est assez vieux maintenant, mais il n'y a pas besoin d'écrire manuellement les requêtes vers un fichier comme ceci. MySQL dispose d'un support de journalisation intégré, il vous suffit de l'activer dans votre environnement dev.

jetez un coup d'oeil à la documentation pour le 'log d'interrogation générale':

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

7
répondu Adam 2013-03-17 12:41:02

les gars, j'ai eu ce problème pendant 1 mois et j'ai tout fait mais je n'ai pas pu le résoudre, 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'erreurs pour le code" file_put_contents". essayez de tester mon plan:

dans votre hôte, créez un fichier comme mytest.php, et mettre ce code et enregistrer:

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

ouvrir L'URL "www.your-domain.com/mytest.php" une fois et puis vérifiez votre e-mail. 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 à propos de "Permission Denied" parce que quelque chose n'est pas défini et si le nom de l'expéditeur est comme mon id: iietj8qy@hostname5.netly.net tu n'as pas de problème.

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

j'espère que ça vous aidera!

3
répondu Hesam 2014-02-06 15:57:07

je sais que c'est une question très ancienne, mais je voulais ajouter la bonne solution avec quelques explications en profondeur. Vous aurez à exécuter deux énoncés sur Ubuntu comme des systèmes et puis il fonctionne comme un charme.

Les Permissions

sous Linux peuvent être représentées avec trois chiffres. Le premier chiffre définit la permission du propriétaire des fichiers. Le deuxième chiffre, les autorisations d'un groupe d'utilisateurs spécifique. Le troisième chiffre définit les autorisations pour tous les utilisateurs qui sont pas le propriétaire, ni membre du groupe.

Le serveur est censé exécuter avec un id qui est un membre du groupe. Le serveur web ne devrait jamais fonctionner avec le même id que le propriétaire des fichiers et répertoires. Dans Ubuntu fonctionne apache sous l'id www-data. Cet id doit être un membre du groupe pour lequel les autorisations sont spécifiés.

pour donner au répertoire dans lequel vous voulez changer le contenu des fichiers les droits appropriés, exécutez le déclaration:

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

.Cela impliquerait dans la question de L'OP que les permissions 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 devraient 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é.

permissions de lecture (4) pour un répertoire signifie pouvoir collecter tous les fichiers et des répertoires avec leurs métadonnées dans un répertoire. Write permissions (2) donne la permission de changer le contenu du répertoire. Impliquant l'ajout et la suppression de fichiers, la modification des permissions, etc.. Permission d'exécution (1) signifie que vous avez le droit d'aller dans ce répertoire. Sans cette dernière, il est impossible d'aller plus loin dans le répertoire. Le serveur web a besoin de permissions de lecture, d'écriture et d'exécution lorsque le contenu d'un fichier doit être modifié. Pour cela le groupe doit le chiffre 7.

la deuxième déclaration est dans la question de L'OP:

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

Être capable de lire et d'écrire un document est nécessaire, 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 d'avoir la permission d'exécuter le fichier afin de changer son contenu. Ces permissions d'écriture ne doivent être données qu'aux fichiers de ce répertoire.

tous les autres utilisateurs ne doit pas être donné aucune autorisation.

pour les répertoires qui n'ont pas besoin de changer leurs fichiers sont des permissions de groupe de 5 suffisantes. 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
répondu Loek Bergman 2015-12-21 18:30:43

la Collecte d'informations à partir de ce lien stackoverflow-image enregistrement 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 lancé 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 le terminal, cd 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 changer les persmissions 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.

2
répondu Bruce Tong 2017-07-19 16:44:34

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 clic droit sur le fichier que vous essayez d'ouvrir, cliquez Propriétés > Paramètres > et donner lire écrire à "tout le monde "

0
répondu d-_-b 2012-10-20 00:19:04

avait le même problème; mon problème était selinux a été réglé à l'exécution.

j'ai continué à obtenir l'erreur" failed to open stream: Permission denied " même après avoir modifié le code 777 et m'être assuré que tous les dossiers parents avaient les permissions d'exécution pour l'utilisateur apache. Il s'avère que mon problème était que selinux était réglé pour appliquer (je suis sur centos7), c'est une devbox donc je l'ai éteint.

0
répondu DaveS 2018-03-13 17:58:58

il y a 2 Façon de résoudre ces problèmes

1. utilisez chmod 777 path-to-your-directory .

si elle ne fonctionne pas alors

2. il vous suffit de fournir le chemin complet de votre fichier query.txt .

-2
répondu Salman Mohammad 2017-01-12 06:57:13

Voici la solution. Pour copier un img à partir d'une URL. cette URL: http://url/img.jpg

$image_Url=file_get_contents('http://url/img.jpg');

créer le chemin désiré terminer le nom par .jpg

$file_destino_path="imagenes/my_image.jpg";

file_put_contents($file_destino_path, $image_Url)
-3
répondu masterhoo 2015-12-21 18:34:21

en outre, comme dit dans file_put_contents man page dans php.net , méfiez-vous des questions de dénomination.

file_put_contents($dir."/file.txt", "hello");

peut ne pas fonctionner( même s'il est correct sur la syntaxe), mais

file_put_contents("$dir/file.txt", "hello");

works. J'ai expérimenté cela sur différents serveurs php installés.

-10
répondu Kivanc 2011-11-17 06:47:52