From 133431874e0da5ffbef277e96c653d52a1d49394 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Wed, 13 Sep 2006 16:03:07 +0000 Subject: [PATCH] preg_files devient optionellement non recursif avec false en 4 eme argument une fonction find_all_in_path qui retrouve l'occurence utilisee par find_in_path d'un type de fichier (defini par un $pattern) dans un sous repertoire eventuel du chemin --- ecrire/inc/flock.php | 3 ++- ecrire/inc/utils.php | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ecrire/inc/flock.php b/ecrire/inc/flock.php index 2c3f05e490..992b58d7a8 100644 --- a/ecrire/inc/flock.php +++ b/ecrire/inc/flock.php @@ -205,6 +205,7 @@ function creer_repertoire($base, $subdir) { // Attention, afin de conserver la compatibilite avec les repertoires '.plat' // si $dir = 'rep/sous_rep_' au lieu de 'rep/sous_rep/' on scanne 'rep/' et on // applique un pattern '^rep/sous_rep_' +// si $recurs vaut false, la fonction ne descend pas dans les sus repertoires // // http://doc.spip.org/@preg_files function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=array()) { @@ -230,7 +231,7 @@ function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=arr $nbfiles++; } } - else if (is_dir($f)){ + else if (is_dir($f) AND is_array($recurs)){ $rp = @realpath($f); if (!is_string($rp) OR !strlen($rp)) $rp=$f; # realpath n'est peut etre pas autorise if (!isset($recurs[$rp])) { diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index ad0940d08e..64458f1d5b 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -671,6 +671,28 @@ function find_in_path ($filename) { return false; } + +function find_all_in_path($dir,$pattern){ + $liste_fichiers=array(); + $maxfiles = 10000; + + // Parcourir le chemin + foreach (creer_chemin() as $d) + if (@is_dir($f = $d.$dir)){ + $liste = preg_files($d.$dir,$pattern,$maxfiles-count($liste_fichiers),false); + foreach($liste as $chemin){ + $nom = basename($chemin); + // ne prendre que les fichiers pas deja trouves + // car find_in_path prend le premier qu'il trouve, + // les autres sont donc masques + if (!isset($liste_fichiers[$nom])) + $liste_fichiers[$nom] = $chemin; + } + } + + return $liste_fichiers; +} + // predicat sur les scripts de ecrire qui n'authentifient pas par cookie // http://doc.spip.org/@autoriser_sans_cookie -- GitLab