IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récursivité parcours dossier (lenteur)


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut Récursivité parcours dossier (lenteur)
    Bonjour,

    j'ai un script php qui permet de parcourir de manière récursive l'ensemble des sous répertoires d'un répertoire donné. Le but étant d'obtenir l'équivalent de l'explorateur de windows, avec dans un menu à gauche, la liste des dossiers imbriqués et à droites, la liste des fichiers du répertoire sélectionner.

    Voici le script en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    function scanRepertoire($dirPath,$treeIcon,&$nodeId,$parentNodeId)
    {
     $rep = opendir($dirPath);
     
     $childNode = array(); 
     
    	while(false !== ($files = readdir($rep)))
    	{
    		if(is_dir($dirPath."/".$files) && ($dirPath."/".$files != ".." && $dirPath."/".$files != "."))
    		{  
    			if(!in_array($files,$G_SYSTEM_DIRECTORY))
    			{	 
    				 $nodeId++;
    				 $tmpNodeId = $nodeId;
    				 $childNode[] = new NoeudTreeview($files,
    												  $treeIcon["folder"],	#Image noeud ouvert
    											  	  $treeIcon["folderopen"],		#Image noeud Fermé scanRepertoire($G_PATH."/".$files,$nodeId	
    											  	  scanRepertoire( $dirPath."/".$files, $treeIcon,$nodeId,$nodeId),
    											  	  $G_URL_SSL."/LOGGED-IN/ContentManagement/fileManager.php?DIR=".$dirPath."/".$files."&FIELD_NAME=".$_GET["FIELD_NAME"]."&MODE=".$_GET["MODE"],
    											  	  $tmpNodeId,
    											      $parentNodeId,$nbrOfBoucle);
    			}
    		 }
    	}
    	return $childNode;
    }
    Donc le code est simple, tant qu'il y a des fichiers dans le dossier, je boucle et je regarde si j'ai bien un dossier et si il s'agit bien d'un dossier ou l'on peut avoir accès.

    Ce code fonctionne parfaitement mis à part que je le trouve très lent. 14 Secondes minimum pour parcourir un dossier qui contient environs 8000 fichiers et 600 dossiers.

    Que me conseillez-vous afin d'optimiser ce code ?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    J'ai réalisé le même type de parcours sur un dossier contenant 20000 entrée fichier et dossier confondu.

    la seul solution réside dans le fait de faire un parcours séquentiel.

    En gros tu ne parcours le niveau que tu veux afficher uniquement au moment du clic et tu ne descend pas plus bas dans l'arborescence.

Discussions similaires

  1. [VBA-A]Parcours d'une arborescence dossiers et fichiers
    Par sidneyvba dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/03/2006, 16h58
  2. empecher parcours dossier sur serveur
    Par billoum dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 13/03/2006, 17h39
  3. Récursivité dans une arborescence de dossiers...
    Par thony23 dans le forum Langage
    Réponses: 5
    Dernier message: 26/10/2005, 16h14
  4. Parcours d'arbre sans récursivité
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 12/04/2005, 13h57
  5. [LG]Lenteur de parcours de fichier
    Par YéTeeh dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2003, 22h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo