OVH Cloud OVH Cloud

Pb avec is_dir

2 réponses
Avatar
jp.witz
Bonjour
J'utilise is_dir pour afficher le contenu d'un dossier et sous dossiers pour
télécharger des documents. Voici mon script

$handle=opendir($d);
while ($file = readdir($handle)) {
echo "debug=".var_dump(is_dir($file));//
ligne debug
if ($file != "." and $file != "..") {
if (is_dir($file)){
echo "<img src='Folder.gif' > $file<br>\n";
}else{
echo "<img src='doc.gif' ><a href='$d/$file'> $file</a><br>\n";
}
}
}
closedir($handle);

Au premier niveau ($d='.' ), tout se passe bien. php fait bien la
distinction entre un dossier et un fichier (is_dir).
Mais à partir du 2° niveau($d='./mon dossier'), is_dir() teste
aléatoirement.
J'ai rajouté une ligne debug dont voici le résultat:
Au premier niveau ($d='.' ), j'ai debug=int(1) pour un dossier et
debug=int(0) pour un fichier
A partir du 2° niveau($d='./mon dossier'), j'ai pratiquement toujours
debug=bool(false), que ce soit un fichier ou un dossier.
Parfois (rarement) j'ai l'une ou l'autre valeur juste.

Qq1 aurait une idée sur ce qui ne colle pas?
merci
JPW

2 réponses

Avatar
Paul Delannoy
jp.witz a écrit:

Qq1 aurait une idée sur ce qui ne colle pas?


Sans doute qq chose au niveau d'avant : Systeme ? Apache ou autre ?...

Avatar
Olivier Miakinen

$handle=opendir($d);


Prenons $d = './dir' pour fixer les idées.

while ($file = readdir($handle)) {


Supposons $file = 'fichier'

if ($file != "." and $file != "..") {
if (is_dir($file)){


Euh... c'est vraiment 'fichier' que tu veux tester, c'est-à-dire
'./fichier', ou bien c'est './dir/fichier' ?

Au premier niveau ($d='.' ), tout se passe bien. php fait bien la
distinction entre un dossier et un fichier (is_dir).
Mais à partir du 2° niveau($d='./mon dossier'), is_dir() teste
aléatoirement.


Ce n'est pas aléatoire. Cela dépend si, lorsque tu veux tester un
répertoire d'un nom donné sous ./mon_dossier, il existe un autre
répertoire du même nom sous le répertoire courant. C'est-à-dire que si
tu as ./toto, alors c'est lui qui sera testé lorsque tu crois tester
./mon_dossier/toto.

Essaye donc is_dir("$d/$file") au lieu de is_dir($file). Ça devrait
fonctionner bien mieux.

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.