Afficher le contenu d'un repertoire en PHP

Résolu
je veux afficher une liste des fichiers d'un repertoires en utilisant PHP, par exemple, sur mon site , j'ai un repertoire mp3 qui contient des mp3, je veux qu'une page "list.php" affiche le contenu de ce repertoire, merçi

si vous avez un autre astuce plus simple ça serait mieux, merçi

22 réponses

Résumé de la discussion

Afficher la liste des fichiers d'un répertoire avec PHP, par exemple un répertoire mp3, sur une page list.php qui affiche le contenu et propose une solution efficace. La solution principale consiste à ouvrir le répertoire avec opendir et à parcourir avec readdir, en séparant fichiers et dossiers puis en les triant avant d'afficher des liens cliquables. En alternative plus simple, on peut utiliser un script minimal qui lit chaque entrée puis affiche le nom du fichier, et on peut restreindre l'affichage à des extensions spécifiques comme HTML. Pour tester et déboguer, un serveur local comme WAMP peut faciliter le développement hors ligne, et vérifier les droits d'accès (CHMOD) peut éviter des blocages d'affichage.

Bobot (l’IA à votre service)
  1. Contributeur
    tiens, regarde si ca te conviens, j'ai fait ca y'a quelques semaines sur ccm, je retrouve plus la version in line... mais tu auras pas de difficultés à le tester et a le mettre à ta guise :

    <?php
    $dir_nom = '.'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
    $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
    $fichier= array(); // on déclare le tableau contenant le nom des fichiers
    $dossier= array(); // on déclare le tableau contenant le nom des dossiers
    
    while($element = readdir($dir)) {
    	if($element != '.' && $element != '..') {
    		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
    		else {$dossier[] = $element;}
    	}
    }
    
    closedir($dir);
    
    if(!empty($dossier)) {
    	sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
    	echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
    	echo "\t\t<ul>\n";
    		foreach($dossier as $lien){
    			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
    		}
    	echo "\t\t</ul>";
    }
    
    if(!empty($fichier)){
    	sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
    	echo "Liste des fichiers/documents accessibles dans '$dir_nom' : \n\n";
    	echo "\t\t<ul>\n";
    		foreach($fichier as $lien) {
    			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
    		}
    	echo "\t\t</ul>";
     }
    ?>
    140
    1. bonjour,

      merci pour ce bout de script, il correspond bien à ce que je recherchais!

      parcontre je n'arrive pas à voir comment je pourrait ensuite faire pour supprimer un où plusieurs des fichiers parmis la liste..

      avec une case à cocher qui renseigne une fonction ulink mais bon... j'ai pas trop d'idée là...

      si qqun à un tuyau c cool.

      Merci encore pour la réponse.

      bye
      0
    2. ton code ma bcp servis mais j'ai eu du mal a rajoute une optien pour filré les fichier : commme php ou autre en premier j'utilise ce code :
       <?php
          
           function listing($repertoire){
         
           $fichier = array();
          
           if (is_dir($repertoire)){
          
           $dir = opendir($repertoire); //ouvre le repertoire courant désigné par la variable
           while(false!==($file = readdir($dir))){ //on lit tout et on récupere tout les fichiers dans $file
         
           if(!in_array($file, array('.','..'))){ //on eleve le parent et le courant '. et ..'
          
           $page = $file; //sort l'extension du fichier
           $page = explode('.', $page);
           $nb = count($page);
           $nom_fichier = $page[0];
           for ($i = 1; $i < $nb-1; $i++){
           $nom_fichier .= '.'.$page[$i];
           }
           if(isset($page[1])){
          $ext_fichier = $page[$nb-1];
          if(!is_file($file)) { $file = ''.$file; }
          
      	 }
           else 
      	 {
          if(!is_file($file)) { $file = ''.$file; } //on rajoute un "/" devant les dossier pour qu'ils soient triés au début
      	
      	
      	
           $ext_fichier = '';
      	
           }
          
           if($ext_fichier != 'php3' and $ext_fichier != 'db' ) { //utile pour exclure certains types de fichiers à ne pas lister
           array_push($fichier, $file);
           }
          }
           }
           }
          
      
      	
           natcasesort($fichier); //la fonction natcasesort( ) est la fonction de tri standard sauf qu'elle ignore la casse
           // et la date du téléchargement
      
            
          foreach($fichier as $value) {
      
      	
           echo '    <a href="'.rawurlencode($repertoire).'/'.rawurlencode(str_replace ('/', '', $value)).'"  target=\"_blank\">'.$value.'</a> <br />';
      	
      
      
      
           }
          
           }
          
           //exemple d'utilisation :
         
           listing('admin/UPLOAD/emploi/upload'); //chemin du dossier
      
         ?> 

      exp
      il marché tres bien localement mais une fois que j'ai mis le site sur le serveur j'ai eu des probleme de lien voici donc ce qu'il me donne exp : The requested URL /admin/UPLOAD/emploi/upload/emploi du temsp.pdf was not found on this server.

      puis j'ai adopter le tien et les liens marche trés bien apart que cette fois ci il affiche aussi le liens des page web.
      0
    3. bonjour a tous,

      voilà je sais que ce topic est vieux de 9 mois, mais voilà je ne comprend pas entièrement la script de gryzzly pour lister
      le contenu d'un repertoire.

      Pourquoi a t on besoin de tester si $exemple = '.' et '..'

      voilà

      merci d'avance pour vos reponses
      0
    4. Contributeur
      @nayonparce que fais le test, sans tester ces deux éléments. Tu verras que c'est très moche ! Tu n'a pas besoin d'afficher dans le listing le dossier ou tu es (.) ni le dossier supérieur (..) (a moins que dans ton cas tu ne cherches justement à les afficher mais je ne vois pas l'intéret d'afficher à l'écran un . et deux ..)

      Suis je clair ? Fais le test, ce sera bcp plus parlant !
      0
    5. @gryzzlyslt, désolé de répondre tardivement

      En faite j'avais mal posé mal question et j'avais testé l'affichage sans enlever le . et le ..
      Je voulais savoir à quoi ils servaient, en tout cas maintenant je sais grâce à toi que cela sert à se balader dans l'arborescence.

      Merci pour tout

      Tchao
      0