Comment donner à PHP l'autorisation d'écriture sur un répertoire ?
P粉512363233
P粉512363233 2023-08-27 15:25:11
0
2
581
<p>J'essaie de créer un fichier en utilisant PHP mais cela ne fonctionne pas. Je suppose que c'est parce qu'il n'a pas d'accès en écriture (ce problème a déjà eu lieu). J'ai essayé de tester si c'était le problème en chmod 0777 le dossier, mais cela a fini par amener chaque script de ce répertoire à renvoyer un message d'erreur 500 jusqu'à ce que je le modifie à nouveau. Comment puis-je donner à PHP un accès en écriture à mon système de fichiers afin qu'il puisse créer des fichiers ? </p> <p>EDIT : il est hébergé sur l'hébergement partagé Hostgator à l'aide d'Apache. </p> <p>Edit 2 : quelqu'un a posé des questions sur le code : Le code est un script d'image GD. Je sais que le reste fonctionne comme avant lorsque je créais l'image à chaque fois que je l'appelais. Maintenant, j'essaie de les créer lors de l'ajout d'un nouveau texte et de les enregistrer dans un dossier. Ma ligne d'écriture est : imagejpeg(null,$file,85);</p> <p>J'ai également créé un fichier de test pour vérifier s'il ne s'agissait que d'un script cassé (principalement copié depuis tizag) : http://gearboxshow.info/rkr/lesig.jpg/testfile.txt (Je ne sais pas si/comment publier le code ici correctement. C'est le contenu du script PHP, moins les balises PHP.) < /p> <p> Il renvoie 13,13,1 (lignes séparées), donc on dirait qu'il pense avoir écrit quelque chose, mais le testfile.txt est vide (j'en ai téléchargé un vide) ou n'existe pas (si je supprime il)). </p> <p>Edit 3 : Le serveur exécute CentOS. </p>
P粉512363233
P粉512363233

répondre à tous(2)
P粉376738875

Une solution simple en trois étapes


Étape 1 : Identifier l'utilisateur PHP

Créez un fichier PHP avec le contenu suivant :

<?php echo `whoami`; ?>

Téléchargez-le sur votre serveur Web. Le résultat devrait ressembler à ce qui suit :

www-data

Donc, les utilisateurs PHP le sont www-data.


Étape 2 : Déterminer le propriétaire de l'annuaire

Ensuite, vérifiez les détails du répertoire web via la ligne de commande :

ls -dl /var/www/example.com/public_html/example-folder

Le résultat devrait ressembler à ce qui suit :

drwxrwxr-x 2 exampleuser1 exampleuser2 4096 Mar 29 16:34 example-folder

Par conséquent, le propriétaire de cet annuaire est exampleuser1.


Étape 3 : Changer le propriétaire du répertoire en utilisateur PHP

Ensuite, remplacez le propriétaire du répertoire Web par l'utilisateur PHP :

sudo chown -R www-data /var/www/example.com/public_html/example-folder

Vérifiez que le propriétaire de l'annuaire web a changé :

ls -dl /var/www/example.com/public_html/example-folder

Le résultat devrait ressembler à ce qui suit :

drwxrwxr-x 2 www-data exampleuser2 4096 Mar 29 16:34 example-folder

À ce stade, le propriétaire de example-folder a été remplacé avec succès par l'utilisateur PHP : example-folder 的所有者已成功更改为 PHP 用户:www-data.


Fait ! PHP devrait maintenant pouvoir écrire dans le répertoire.

P粉352408038

Un moyen simple consiste à laisser PHP créer d’abord le répertoire lui-même.

<?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 des problèmes avec les autorisations.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal