Test existence d'un fichier
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai une fonction récursive, qui se charge de lister des fichiers selon leur extension dans un répertoire et ses sous-répertoires, et je voudrais que le nom du répertoire ne soit affiché que s'il contient au moins un fichier portant l'extension souhaitée.
Ppour l'instant, j'en suis là
Il y a peut-être d'autres choses à améliorer; je prend tout ^^
par avance, merci.
J'ai une fonction récursive, qui se charge de lister des fichiers selon leur extension dans un répertoire et ses sous-répertoires, et je voudrais que le nom du répertoire ne soit affiché que s'il contient au moins un fichier portant l'extension souhaitée.
Ppour l'instant, j'en suis là
<?php
function listing($dir) {
$dh = opendir($dir);
if($dh) {
while (false !== ($file = readdir($dh))) {
if(is_file($dir.$file) && stristr($dir.$file, '.gz')) {
echo '<a href="'.preg_replace('/usr\/share\//', '', $dir).$file.'">'.$file.'</a><br />';
} elseif(is_dir($dir.$file) && $file!=".." && $file!="." ) {
$gzfile = $dir.$file."/*.gz";
// là, ça coince : la condition n'est jamais vérifiée
if (file_exists($gzfile)) {
echo preg_replace('/usr\/share\/doc\//', '', $dir).$file.'<br>';
}
$new_dir=realpath($dir.$file);
listing("$new_dir/");
}
}
closedir($dh);
}
}
listing("/usr/share/doc/");///Utilisation de la fonction (on part de la racine du répertoire)
?>
Il y a peut-être d'autres choses à améliorer; je prend tout ^^
par avance, merci.
Configuration: Debian GNU/Linux Stable
3 réponses
-
Bonjour,
Du code de haut vol non commenté... Beau casse tête.
Donc ce que je vais dire est peut-être faux mais ton $gzfile = $dir.$file."/*.gz"; doit TOUJOURS être null non? Parce que sinon, on est pas dans le elseif mais bien dans le if contenant le premier echo ... -
si je remplace *.gz par un nom de fichier qui existe dans le répertoire, ça fonctionne...
le problème c'est cette pseudo-regex
J'ai l'impression que PHP interprète l'astérisque littéralement.
Comment lui dire de considérer l'astérisque en tant que caractère générique? -
J'ai avancé un peu, ça marche mieux avec quelques modifications
elseif(is_dir($dir.$file) && ! is_link($dir.$file) && $file!=".." && $file!="." ) { if (glob($dir.$file.'/*.gz')) { echo preg_replace('/usr\/share\/doc\//', '', $dir).$file.'<br>'; } $new_dir=realpath($dir.$file); listing($new_dir.'/'); }
mais ce n'est pas encore parfait. Par exemple, j'obtiens
/iproute-doc/examples
/iproute-doc/examples/diffserv
Edge31-ca-u32.gz
Edge32-cb-chains.gz
Edge32-ca-u32.gz
Edge32-cb-u32.gz
----------------------------------------------v-- ça fait partie de iproute-doc/examples
dhcp-client-script.gz
README.cbq.gz
cbq.init-v0.7.3.gz
----------------------------------------------v-- ça fait partie de iproute-doc, qui est au-dessus et affiche d'autres fichiers
arpd.dvi.gz
api-ip6-flowlabels.tex.gz
api-ip6-flowlabels.ps.gz
arpd.txt.gz
ip-cref.tex.gz
ip-tunnels.tex.gz
C'est donc encore un peu le bazar :(