Version complète: sur le forum Webmaster Hub : Comment tester les droits d'un repertoire?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
rportal
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é:
CODE
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
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":

CODE
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
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
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
Pas bête smile.gif
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é?
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.