75 votes

Comment donner à PHP un accès en écriture à un répertoire ?

J'essaie d'utiliser PHP pour créer un fichier, mais cela ne fonctionne pas. Je suppose que c'est parce qu'il n'a pas d'accès en écriture (cela a toujours été le problème auparavant). J'ai essayé de tester si c'était le problème en mettant le dossier en chmod 0777, mais cela a juste fait en sorte que chaque script dans ce répertoire retourne un message d'erreur 500 jusqu'à ce que je le change à nouveau. Comment puis-je donner à PHP un accès en écriture à mon système de fichiers pour qu'il puisse créer un fichier ?

Edit : Il est hébergé sur un hébergement mutualisé Hostgator utilisant Apache.

Edit 2 : Quelqu'un a demandé le code : Le code est une image GD script. Je sais que le reste fonctionne car auparavant je créais l'image à chaque fois qu'elle était appelée. Maintenant, j'essaie de les créer quand un nouveau texte est ajouté et de les enregistrer dans un dossier. La ligne d'écriture que j'ai est la suivante imagejpeg(null,$file,85) ;

J'ai également créé un fichier de test pour vérifier si c'était juste un script cassé (principalement copié de tizag) : http://gearboxshow.info/rkr/lesig.jpg/testfile.txt (Je ne sais pas si/comment poster le code ici correctement. Voici le contenu du script de PHP, sans les balises PHP).

Il renvoie 13,13,1 (lignes séparées), donc il semble qu'il pense avoir écrit quelque chose, mais le testfile.txt est vide (j'en ai téléchargé un vide), ou inexistant (si je le supprime).

Edit 3 : Le serveur fonctionne sous CentOS.

0 votes

S'agit-il d'un serveur que vous contrôlez ou êtes-vous sur un serveur partagé ?

0 votes

Hébergement partagé Hostgator. Apache.

0 votes

Sur quel système d'exploitation tourne le serveur ? Si c'est Linux, vous devez vous assurer que l'utilisateur apache (le nom d'utilisateur exact dépend de votre configuration - souvent httpd ou www-data sous Linux) a un accès en écriture au répertoire. Vous pouvez changer le propriétaire pour le même utilisateur qu'apache (en utilisant chown) et donner au propriétaire un accès en écriture (par exemple "chmod 755") ou vous pouvez le rendre accessible en écriture au monde entier (par exemple "chmod 777").

63voto

favo Points 2852

Un moyen simple est de laisser PHP créer lui-même le répertoire en premier lieu.

<?php
 $dir = 'myDir';

 // create new directory with 744 permissions if it does not exist yet
 // owner will be the user/group the PHP script is run under
 if ( !file_exists($dir) ) {
     mkdir ($dir, 0744);
 }

 file_put_contents ($dir.'/test.txt', 'Hello File');

Cela vous évite d'avoir à vous préoccuper des autorisations.

2 votes

C'est vrai. Vous pouvez modifier les permissions pour répondre à vos besoins.

6 votes

C'est la solution la plus simple, mais vous ne devez pas utiliser 777 sur apache, car il est configuré pour bloquer ces fichiers.

8 votes

J'obtiens une permission refusée lors de la création du répertoire !

36voto

Thomas Winsnes Points 1298

Définir le propriétaire du répertoire à l'utilisateur qui exécute apache. Souvent personne sous linux

chown nobody:nobody <dirname>

De cette façon, votre dossier ne sera pas accessible en écriture au niveau mondial, mais toujours accessible en écriture pour apache :)

5 votes

Si vous utilisez Ubuntu, cet utilisateur et ce groupe n'existent pas. Des suggestions pour accomplir ce que vous faites ici alors ?

18 votes

@BrandonMinton 'chown www-data:www-data <dirname>' devrait le faire. www-data est l'utilisateur apache sur les systèmes basés sur Debian.

0 votes

@guitarlass vous devrez mettre cette commande dans une fenêtre bash/ssh

4voto

Ryan Gyure Points 58

Vous pouvez modifier les permissions d'un dossier avec la fonction chmod() de PHP. Plus d'informations sur l'utilisation de cette commande sont disponibles ici : http://php.net/manual/en/function.chmod.php

Si vous obtenez une erreur 500 en fixant les autorisations à 777 (accessible en écriture dans le monde entier), cela signifie que votre serveur est configuré pour empêcher l'exécution de tels fichiers. Ceci est fait pour des raisons de sécurité. Dans ce cas, il est préférable d'utiliser 755 comme permissions maximales sur un fichier.

Si un fichier error_log est généré dans le dossier où vous exécutez le document PHP, vous voudrez voir les dernières entrées. Cela vous donnera une idée de l'endroit où le script échoue.

Pour l'aide à la manipulation des fichiers PHP, j'utilise http://www.tizag.com/phpT/filewrite.php comme une ressource.

0 votes

Le dossier est déjà réglé par défaut à 0755. Je n'avais jamais pensé à vérifier le error_log, mais je viens de le faire et il ne contient rien sur la raison de l'échec de la production des fichiers.

0 votes

Il serait peut-être bon d'afficher le code qui vous pose problème. Une ressource intéressante que j'utilise à l'occasion pour obtenir de l'aide sur la syntaxe des gestionnaires de fichiers est la suivante tizag.com/phpT/filewrite.php .

3voto

BSM Points 19

J'ai découvert qu'avec HostGator, vous devez définir les fichiers sur CMOD 644 et les dossiers sur 755. Comme j'ai fait cela en me basant sur leur support technique, cela fonctionne avec HostGator.

2voto

user988294 Points 39

Chmod ne vous permet pas de définir la propriété d'un fichier. Pour définir la propriété d'un fichier, vous devez utiliser la commande chown.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X