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.
A voir également:
- Test existence d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Test performance pc - Guide
- Steam deck oled test - Guide
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 ...
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?
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
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 :(
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 :(