Test existence d'un fichier

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à
<?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:

3 réponses

Archeus01 Messages postés 1566 Date d'inscription   Statut Membre Dernière intervention   453
 
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 ...
0
Utilisateur anonyme
 
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?
0
Utilisateur anonyme
 
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 :(
0