Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2006, 03h09   #1
Invité régulier
 
Inscription : juin 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 47
Points : 7
Points : 7
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 :
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);
}
hat_et_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2006, 08h26   #2
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
Tu peux utiliser la récursivité pour ton problème

Code :
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
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2006, 15h15   #3
Invité régulier
 
Inscription : juin 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 47
Points : 7
Points : 7
Par défaut Suite

N'y a pas un meilleur code que la récursivité?
hat_et_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2006, 18h42   #4
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
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
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2006, 19h13   #5
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
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 !
_______________________________________________________________________
La rubrique Ruby / Rails recrute. Contactez moi !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h39.


 
 
 
 
Partenaires

Hébergement Web