From 6e030da38f7d6260b9f780bdefbcbda27265095a Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sat, 18 Mar 2006 17:55:31 +0000 Subject: [PATCH] =?UTF-8?q?int=C3=A9gration=20du=20patch=20#144=20sur=20in?= =?UTF-8?q?c=5Fflock,=20qui=20permet=20de=20limiter=20le=20nombre=20de=20f?= =?UTF-8?q?ichiers=20lus=20par=20preg=5Ffiles,=20et=20d'utiliser=20ecrire?= =?UTF-8?q?=5Ffichier=20sans=20ftruncate=20(Cedric)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/inc/flock.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/ecrire/inc/flock.php b/ecrire/inc/flock.php index 0509a6b882..de0227837d 100644 --- a/ecrire/inc/flock.php +++ b/ecrire/inc/flock.php @@ -70,7 +70,7 @@ function lire_fichier ($fichier, &$contenu, $options=false) { // Ecrire un fichier de maniere un peu sure // // zippe les fichiers .gz -function ecrire_fichier ($fichier, $contenu, $ecrire_quand_meme = false) { +function ecrire_fichier ($fichier, $contenu, $ecrire_quand_meme = false, $truncate=true) { // Ne rien faire si on est en preview, debug, ou si une erreur // grave s'est presentee (compilation du squelette, MySQL, etc) @@ -93,7 +93,8 @@ function ecrire_fichier ($fichier, $contenu, $ecrire_quand_meme = false) { // (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage // de le recreer si le locker qui nous precede l'avait supprime...) if ($gzip) $contenu = gzencode($contenu); - @ftruncate($fp,0); + if ($truncate) + @ftruncate($fp,0); $s = @fputs($fp, $contenu, $a = strlen($contenu)); $ok = ($s == $a); @@ -193,31 +194,36 @@ function creer_repertoire($base, $subdir) { // si $dir = 'rep/sous_rep_' au lieu de 'rep/sous_rep/' on scanne 'rep/' et on // applique un pattern '^rep/sous_rep_' // -function preg_files($dir, $pattern=-1 /* AUTO */, $recurs=array()) { +function preg_files($dir, $pattern=-1 /* AUTO */, $maxfiles = 10000, $recurs=array()) { + $nbfiles = 0; if ($pattern == -1) $pattern = "^$dir"; $fichiers = array(); - // revenir au repertoire racine si on a recu dossier/truc // pour regarder dossier/truc/ ne pas oublier le / final $dir = preg_replace(',/[^/]*$,', '', $dir); if ($dir == '') $dir = '.'; if (@is_dir($dir) AND is_readable($dir) AND $d = @opendir($dir)) { - while (($f = readdir($d)) !== false) { + while (($f = readdir($d)) !== false && ($nbfiles<$maxfiles)) { if ($f[0] != '.' # ignorer . .. .svn etc AND $f != 'CVS' AND $f != 'remove.txt' AND is_readable("$dir/$f")) { if (is_file("$dir/$f")) { if (preg_match(",$pattern,i", "$dir/$f")) + { $fichiers[] = "$dir/$f"; + $nbfiles++; + } } else if (is_dir("$dir/$f") AND !in_array(realpath("$dir/$f"), $recurs)) { array_push($recurs, realpath("$dir/$f")); $beginning = $fichiers; - $end = preg_files("$dir/$f/", $pattern, $recurs); + $end = preg_files("$dir/$f/", $pattern, + $maxfiles-$nbfiles, $recurs); $fichiers = array_merge((array)$beginning, (array)$end); + $nbfiles = count($fichiers); } } } -- GitLab