rportal Posté 9 Avril 2006 Posté 9 Avril 2006 Bonjour, j'ai ecrit un script pour savoir si un repertoire est accessible en lecture/ecriture. J'ai des retours de mes utilisateurs pour qui le test ne fonctionne pas... Voici le code, s'il y a un probleme le tableau erreur est modifié: function test_repertoire($repertoire,&$erreur){ $L_repertoire_complet = '../'.$repertoire; if (is_readable($L_repertoire_complet)) { if (!is_writable($L_repertoire_complet)) { $erreur[]="Erreur écriture : impossible d'écrire lire dans le répertoire" . $repertoire .", les droits en écriture ne sont pas présents."; } } else { $erreur[]="Erreur lecture : impossible de lire dans le répertoire" . $repertoire .", les droits en lecture ne sont pas présents."; }} Note: les fonctions is_readable et is_writable fonctionnent pour les fichiers et les repertoires (doc php). Des idées pour effectuer le test correctement?
Dan Posté 10 Avril 2006 Posté 10 Avril 2006 Je ne comprends pas pourquoi tu ajoutes ../ avant $repertoire ... Et si tu veux tester les deux cas (lecture ET ecriture) il faut changer ta fonction et ne pas utiliser "else": function test_repertoire($repertoire,&$erreur){$returnvalue=0;$L_repertoire_complet = '../'.$repertoire; if (!is_readable($L_repertoire_complet)) { $erreur[]="Erreur lecture : impossible de lire dans le répertoire" . $repertoire .", les droits en lecture ne sont pas présents."; $returnvalue += 1; } if (!is_writable($L_repertoire_complet)) { $erreur[]="Erreur écriture : impossible d'écrire lire dans le répertoire" . $repertoire .", les droits en écriture ne sont pas présents."; $returnvalue += 2; }return $returnvalue;} Il faudrait aussi que ta fonction retourne une valeur, telle que 0 si c'est bon, 1 si on ne peut pas lire, 2 si on ne peut pas écrire... et 3 si on ne peut ni lire ni écrire.
rportal Posté 10 Avril 2006 Auteur Posté 10 Avril 2006 Oups je n'ai pas épuré mon bout de code. Le ../ vient du fait que le script est lancé depuis un sous repertoire... En ce qui concerne la valeur de retour, il s'agit du tableau erreur passé en référence. Je fais toute une batterie de tests et à la fin je regarde s'il y a eu des erreurs (tableau non vide). Ce mécanisme fonctionne pour toutes les autres fonctions de tests, donc doit fonctionner pour celle-ci. Le pourquoi du else: un repertoire qui est en ecriture est toujours en lecture...Donc je teste la lecture puis l'ecriture. Le problème semble venir des fonctions is_readable et is_writable...
Leonick Posté 10 Avril 2006 Posté 10 Avril 2006 Le problème est que les droits retournés sont ceux du "propriétaire" et que un chmod 0700 ne donne aucun droit aux visiteurs
rportal Posté 10 Avril 2006 Auteur Posté 10 Avril 2006 Pas bête Ces fonctions seraient donc contruites sur la fonction stat ... Pas top de ne pas préciser cela. Je vais fouiller un peu dans le code de ces methodes pour valider. Dans ce cas, quelqu'un aurait une fonction qui me dit si php a le droit d'écrire sur un repertoire donné?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant