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épertoires] Lister sous forme d'arborescence le contenu d'un dossier [Fait]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 33
    Points
    33
    Par défaut [Répertoires] Lister sous forme d'arborescence le contenu d'un dossier
    Bonjour,

    Auriez-vous un code qui permette d'afficher l'arborescence d'un répertoire (avec ses sous-dossiers et fichiers correspondants)?

    Merci de votre aide.

    Actuellement j'ai un code mais qui se limite au niveau des premiers dossiers et fichiers rencontrés (voir ci-dessous).
    Je voudrais pouvoir décortiquer entièrement le répertoire depuis la racine jusqu'aux derniers fichiers (ou feuilles).

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    $liste=listRep ("_textesdeloi/", "");
    $taille=sizeof($liste);
    for ($i=0;$i<$taille;$i++){
    echo $liste[$i]."<b>";
    }
     
     
     function listRep ($d, $typefichier){
     
       //Initialisation des variables
      $result; //tableau de resultat
      $cptdossier=0; //cpt pour le tab des dossiers
      $cptfichier=0; //cpt pour le tab des fichiers
       $tab_fichier; //tableau de fichiers
       $tab_dossier; //tableau des dossiers
       $estfichier; //booleen pour savoir si c'est un fichier
       $estdossier; //booleen pour savoir si c'est un dossier
     
       // test si c'est un repertoire
       if (!(is_dir($d))){
         print("Ce n'est pas un repertoire");
         exit ;
       }
     
      //ouverture du dossier
      $handle=opendir($d);
     
       //lecture du dossier
       while ($fichier = readdir($handle)){
         if ($fichier != "." && $fichier != ".."){
           //Determination du type
           $estfichier = is_file($d.$fichier);
           $estdossier = is_dir($d.$fichier);
     
           //recup des éléments dans les tableaux respectifs
           if ($estdossier==true){
             $tab_dossier[$cptdossier] = $fichier;
             $cptdossier++;
             next;
           }
           if ($estfichier==true){
             $tab_fichier[$cptfichier] = $fichier;
             $cptfichier++;
             next;
           }
         }
       }
       //mise en place des resultats
         // si dossier
       if ($typefichier=="dossier"){
         $result = $tab_dossier;
       }
         //si fichier
       if ($typefichier=="fichier"){
         $result = $tab_fichier;
       }
         //tous les types
       if (($typefichier=="all")||($typefichier=="")){
         for ($i=0; $i<$cptdossier+1; $i++){
           $result[$i] = $tab_dossier[$i];
         }
         for ($j=0; $j<$cptfichier+1; $j++){
           $i = $cptdossier+$j+2;
           $result[$i] = $tab_fichier[$j];
         }
       }else{
         //extension spécifiées
         $i=0;
         for ($j=0; $j<$cptfichier+1; $j++){
           $extension = explode(".", $tab_fichier[$j]);
           $valmax = count($extension)-1;
           if ($typefichier==$extension[$valmax]){
             $result[$i] = $tab_fichier[$j];
             $i++;
           }
         }
       }
       echo "test<br><br>";
       //fermeture du dossier
       closedir($handle);
       return ($result);
    }

  2. #2
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    Tu peux utiliser la récursivité pour ton problème

    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
    28
    29
    30
    31
    32
    33
     
    <?php
     
    function printRep($repName, $niveauSousDossier)
    {
    //ouverture du dossier
    $handle=opendir($repName);
     
    //lecture du dossier
    while ($fichier = readdir($handle))
    {
    if ($fichier != "." && $fichier != "..")
    {
     if (!(is_dir($fichier)))
     {
      for ($i==0 ; $i<$niveauSousDossier ; $i++ ) 
         echo "--";
      echo $fichier . "<br>";
     }
     else printRep($repName . $fichier, $niveauSousDossier+1);
     
    }
     
    }
     
     
    }
     
     
    echo "test";
    printRep("monRep" , 1);
     
    ?>

    Un truc du style (g pô testé...)

    ++
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 33
    Points
    33
    Par défaut Suite
    N'y a pas un meilleur code que la récursivité?

  4. #4
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    Qu'entend tu par meilleur...

    Je pense que c'est automatique, rapide et efficace, sauf si tu as un raccourci dans un répertoire qui pointe vers son répertoire parent --> boucle infinie...

    ++
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    dans cet article, tu as le code, à simplifier légèrement en fonction de tes besoins

    http://pbnaigeon.developpez.com/tuto...namique/#LII-A
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/12/2012, 16h30
  2. Réponses: 10
    Dernier message: 10/07/2009, 21h41
  3. Lister sous forme d'arborescence un répertoire
    Par Olivier Regnier dans le forum Langage
    Réponses: 4
    Dernier message: 16/10/2008, 19h59
  4. Exporter le contenu d'une table sous forme d'un script SQL
    Par Invité dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 14/09/2005, 10h08
  5. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48

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