Aller au contenu

Comment tester les droits d'un repertoire?


Sujets conseillés

Posté

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?

Posté

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.

Posté

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...

Posté

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

Posté

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é?

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...