2010-08-14 4 views
0

J'ai un site Web de petites annonces, et quand les utilisateurs publient une nouvelle petite annonce, ils peuvent choisir de télécharger des images.Un autre problème de permissions de fichiers

Mon code php prend l'image choisie, la télécharge dans un dossier d'images et la nomme en conséquence.

Le problème ici est, je dois définir le dossier images à 777 pour que cela fonctionne.

Ma question est, quelles devraient être les permissions? Et des idées pourquoi cela ne fonctionne pas si ce n'est 777?

Si vous avez besoin de plus il suffit de saisir laissez-moi savoir ...

Merci

MISE À JOUR

J'ai un utilisateur (danny) qui a un accès root ... Le dossier dans lequel les images sont téléchargées sur, ainsi que le fichier "image_upload.php" qui fait la magie, sont la propriété de l'utilisateur "danny". Ensuite, j'ai juste essayé de les régler sur chmod 764, mais quand je fais cela, j'ai un problème. Voir, il semble que je dois définir les autorisations r + w + e pour le "public" pour que tout fonctionne.

ne peux pas comprendre pourquoi ...

Merci encore

Répondre

1

Oublier Révélations, 777 est le vrai nombre de la bête :-)

Vous devriez presque jamais besoin de définir des autorisations de cette façon. Sûrement vos images sont créées dans le répertoire sous un seul ID d'utilisateur comme php.Si c'est le cas (et cela devrait être le cas), il suffit d'ajouter cet utilisateur au groupe spécifique de ce répertoire et d'autoriser l'accès en écriture de groupe 764 probablement, bien que le dernier chiffre puisse changer en fonction d'autres besoins.

Vous pouvez probablement savoir quel utilisateur est en cours d'exécution en changeant le script de téléchargement à faire:

system ("id >/tmp/id.txt") 

ou quel que soit l'équivalent est en PHP pour l'exécution d'un outil de ligne de commande.

Ensuite, vérifiez le fichier /tmp/id.txt pour les détails. Vous aurez quelque chose comme:

uid=1000(php) gid=1000(phpgrp) groups=1000(phpgrp) 

Une fois que vous trouvez que sur (php), travailler le groupe de ce répertoire images:

pax> ls -ald images 
drwxr-xr-x 4 pax paxgrp 4096 2010-06-14 16:38 images 

Ce serait paxgrp de la transcription ci-dessus. Assurez-vous ensuite que l'utilisateur php est ajouté au groupe paxgrp. Cela peut être fait en /etc/group en changeant, par exemple:

paxgrp:x:1027:bob,george 

dans:

paxgrp:x:1027:bob,george,php 

puis assurer les autorisations de répertoire permettent groupe (mais pas monde) écrit.


Et, en fonction de votre mise à jour, il ne fait pas importe qui votre fichier est propriétaire de PHP, qui est juste en cours d'exécution , et qui ne peut être danny du tout.

Sinon, je pourrais supprimer tout fichier sur le disque dur, car rm appartient à root :-)

La meilleure façon de trouver l'utilisateur pour certains est de changer ce fichier pour qu'elle soit la id informations comme je l'ai suggéré.

+0

+1 pour le vrai nombre de la Bête. :) –

+0

Ok, s'il vous plaît vérifier ma mise à jour ... –

+0

S'il vous plaît regardez ma question de suivi http://stackoverflow.com/questions/3484171/file-permissions-should-my-www-folder-content-be-owned- par-www-data –

1

Et toutes les idées pourquoi il ne fonctionne pas?

autres que les autorisations, assurez-vous de spécifier les paramètres appropriés pour:

  • file_uploads
  • upload_max_filesize
  • memory_limit
  • max_execution_time
  • post_max_size

Voir:

Assurez-vous aussi que:

  • Vous avez spécifié le enctype="multipart" dans le form
  • Vérifiez le tableau des fichiers avec print_r($_FILES);
+0

Ok, merci. Je vais le faire, bien que la plus grande partie soit faite ... Mais je ne comprends pas pourquoi les permissions doivent être 777 pour que les uploads fonctionnent. –

0

Les réponses sont super, je voulais juste ajouter une autre possibilité. Vous avez mentionné qu'un utilisateur "Danny" a un accès root et que Danny possède les fichiers/répertoires. Avec un script PHP non-CLI, l'utilisateur du serveur web devrait posséder le script, alors vous n'auriez pas besoin du public pour pouvoir écrire et exécuter (honnêtement, si vous le faites correctement, vous devriez être capable de définir des permissions pour 700 et encore être ok - bien que ce ne soit généralement jamais aussi restreint).