begin process at 2012 05 31 01:10:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive PHP

 > 

Archives

 > 

AU SECOURS !!!

 > 

probleme avec une fonction recursive...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme avec une fonction recursive...

mardi 30 août 2005 à 09:53:33 | probleme avec une fonction recursive...

mictif

bonjour, j'ai une fonction qui me liste tout les fichier, dossier, d'un repertoire.quand elle tombe sur un dossier elle se réexecute avec celui ci de facon a avoir tout l'arborecense fille de mon dossier.
le prbleme et quelle me renvoi la valeur de retour avant d'avoir finni de lister tout les sous et les sousousrepertoires...ainsi que les fichiers si trouvant.

 je vous met le code parce que mon explication apres relecture ne semble pas tres claire :



$toto=getFileList('./',true);

  echo "<pre>";
  print_r($toto);
  echo "</pre>";

 function getFileList($dir, $recurse=false)
  {
    # array to hold return value
    $retval = array();

    # add trailing slash if missing
    if(substr($dir, -1) != "/") $dir .= "/";

    # open pointer to directory and read list of files
    $d = @dir($dir) or die("getFileList: Failed opening directory for reading");
    while(false !== ($entry = $d->read())) {
      # skip hidden files
      if ($entry[0] == ".") continue;
      if (is_dir("$dir$entry")) {
        if($recurse && is_readable("$dir$entry/")) {
          $retval = array_merge($retval, getFileList("$dir$entry/"));
        } else {
          $retval[] = array(
            "name" => "$dir$entry/",
            //"type" => filetype("$dir$entry"),
            "size" => 0,
            "lastmod" => filemtime("$dir$entry")
          );
        }
      } else {
        $retval[] = array(
          "name" => "$dir$entry",
          //"type" => mime_content_type("$dir$entry"),
          "size" => filesize("$dir$entry"),
          "lastmod" => filemtime("$dir$entry")
        );
      }
    }
    $d->close();

    return $retval;
}


comment faire pour quelle ne me les renvoi que lorsqu'elle a finni de lister tout les sous et sous
-sous repertoires?
merci d'avance
mardi 30 août 2005 à 10:00:49 | Re : probleme avec une fonction recursive...

malalam

Administrateur CodeS-SourceS
Hello,

à la place de tes $dir$entry, tu devrais écrire : $dir.$entry


mardi 30 août 2005 à 10:31:31 | Re : probleme avec une fonction recursive...

ashboody

Membre Club
hello,je pense avoir compris ton pbce que tu as besoin sont les fonctions ob_start() et ob_end_flush()la premiere enclenche la bufferisation de sortie et la 2e afficher le buffertu peux mettre en place une fonction de callback sur le buffer (voir mon exemple)si ma reponse te conviens pense a l'accepterJ'espere qu'il n'y aura pas de pb de sauts de lignes (car les \n provenant de mon linux ne sont pas interpretés comme des sauts de ligne ici)aurelienfunction callback($buffer) {$buffer2 = "";$buffer2.= str_replace("{", "", $buffer);$buffer2 = str_replace("}", "", $buffer2);$buffer2.= ""; return $buffer2; } ob_start("callback");for($i=0; $i{echo "{input $i}";} ob_end_flush();?>
mardi 30 août 2005 à 10:37:20 | Re : probleme avec une fonction recursive...

ashboody

Membre Club
je tente un nouveau post avec des sauts de lignes potables
hello,
je pense avoir compris ton pb
ce que tu as besoin sont les fonctions ob_start() et ob_end_flush()
la premiere enclenche la bufferisation de sortie et la 2e afficher le buffer
tu peux mettre en place une fonction de callback sur le buffer (voir mon exemple)

si ma reponse te conviens pense a l'accepter

aurelien

<?php

function callback($buffer)
{
$buffer2 = "<ul>";
$buffer2.= str_replace("{", "<li>", $buffer);
$buffer2 = str_replace("}", "</li>", $buffer2);
$buffer2.= "</ul>";
   return $buffer2;
}

ob_start("callback");

for($i=0; $i<10; $i++)
{
echo "{input $i}";
}


ob_end_flush();

?>
mardi 30 août 2005 à 10:44:46 | Re : probleme avec une fonction recursive...

malalam

Administrateur CodeS-SourceS
Perso je ne comprends pas ton probleme.
Quand tu appelles ta ofnction récursivement, tu merges un "nouveau" tableau et la valeur de retour. Ce, jusqu'à arrêt complet des appels récursifs. Donc à la fin, à l'appel de ta fonction, tu dois retrouver ton tableau complet avec tous les répertoires et sous-répertoires. Si ce n'est pas le cas, c'est que ta fonction rrête de s'appeler récursivement ava,nt d'avoir fini l'arborescence, et donc qu'il y a un probleme dans ta détection des sous-répertoires, fichiers...

Voici un extrait d'un de mes programmes, tu traduiras. Cet appel fonctionne parfaitement.

  1. public function __construct ($chemin = '.', $objForm, $interdits = '') { // constructeur, on initialise quelques membres.
  2.         setlocale (LC_TIME,'French');
  3.         if (is_array ($interdits)) {
  4.             $this -> interdits = $interdits;
  5.         }
  6.         $this -> chemin = $chemin;
  7.         $this -> objForm = $objForm;
  8.         //$this -> tableau_dir = $this -> create_tab ($this -> chemin);
  9.     }
  10.     
  11.     public function create_tab ($dir) { // methode creant le tableau contenant les repertoires et fichiers
  12.         $dir = rtrim ($dir, '/'); // on vire un eventuel slash mis par l'utilisateur de la fonction a droite du repertoire
  13.         if (is_dir ($dir)) // si c'est un repertoire
  14.             $dh = opendir ($dir); // on l'ouvre
  15.         else {
  16.             echo $dir, ' n\'est pas un repertoire valide'; // sinon on sort! Appel de fonction non valide
  17.             exit;
  18.             }
  19.         while (($file = readdir ($dh)) !== false ) { //boucle pour parcourir le repertoire
  20.             if ($file !== '.' && $file !== '..' && !in_array ($file, $this -> interdits)) { // no comment
  21.                 $path =$dir.'/'.$file; // construction d'un joli chemin...
  22.                 if (is_dir ($path)) { //si on tombe sur un sous-repertoire
  23.                     $tableau[$dir]['dir'][] = $path;
  24.                     $tabTmp = $this -> create_tab ($path); // appel recursif pour lire a l'interieur de ce sous-repertoire
  25.                     if (is_array ($tabTmp) && is_array ($tableau))
  26.                         $tableau = array_merge ($tableau, $tabTmp);
  27.                 }
  28.                 else
  29.                     $tableau[$dir]['file'][] = $path;
  30.             }
  31.         }
  32.         closedir ($dh); // on ferme le repertoire courant
  33.         return $tableau;
  34.     }   
mardi 30 août 2005 à 10:46:43 | Re : probleme avec une fonction recursive...

malalam

Administrateur CodeS-SourceS
et ça n'a de toutes façons rien à voir, à priori, avec la bufferisation de sortie...


Cette discussion est classée dans : retval, array, dir, entry, getfilelist


Répondre à ce message

Sujets en rapport avec ce message

easyphp aurait des lacunes ? [ par Teclis01 ] Voila je viens exposer mon petit probleme ...je pensais faire un petit explorateur de fichier pour mon site donc je fais chauffer easyphp et la le dra string_to_array et array_to_string ? [ par pioug43 ] Bonjour,     Je recherhce une fonction qui pourrait me traduire un tableau vers une string et inversement de plus la fonction etre recurcive puisqu'u Probème avec array slice [ par goboben ] Bonjour, J'ai realiser un diaporama avec une pagination (page par page) mais je n'ai pas utilise de limit dans la requete (j'utilise odbc avec access) Erreur de syntax pour checkbox [ par djinko ] Bonjour à tous, J'ai une belle erreur comme vous pouvez le constater... J'ai crée une table : CREATE TABLE `competence` ( < tableau php [ par lucky82 ] bonjourj'ai une chaine de caractere $ch qui est composée de plusieurs mots separés par des espaces,je veux creer un tableau qui soit de la forme suiva pb urgent de array! [ par joduak ] Salut à vous! J'ai un ptit pb de tableau... Je voudrais afficher chaque élément de mon tableau indifféremment. je ne veux pas avoir l'affichage suivan probleme de doublon mysql [ par Dyr3e ] bonjourj'utilise une requete sous mysql  et j'ai eu recement un problème assez etrange, lorsque je fais un mysql_fetch_array, j'obtiens un array dont php et javascript [ par billy67000 ] Salut, Désolé de poser une question javscript sur ce forum mais c'est le meilleurs. je veux crée une diapo avec des valeurs chargé d'une base de donn Erreur stupide j'en suis sur [ par jnbrunet ] // On vérifie à quel endroit dans la table on récupère les messages. $nom = $_GET['nom']; $start=0; mysql et php [ par refkaben ] Bonjour dans une premiere page de mon site j'affiche des secteurs d'activités à partir de ma base, je récupère l'identifiant du secteur , je passe sur


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales