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
Sans doute qq chose au niveau d'avant : Systeme ? Apache ou autre ?...
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.
$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.
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.