Lister le contenu d’un dossier

0.00 avg. rating (0% score) - 0 votes
Partager:

Il arrive souvent qu’on stocke certaines données dans des fichiers sur le serveur, il faut pouvoir les récupérer pour les lire.

Pour lister un dossier et ces fichiers, il y a plusieurs façon comme utiliser opendir avec readdir ou simplement la fonction scandir.
La seconde étant la plus simple.


ICI on liste le contenu d’un dossier avec opendir et readdir:


<?php
$dir = "./";
	if ($dh = opendir($dir)) 
		{
			while (($file = readdir($dh)) !== false) 
			{
				if($file != '.' && $file != '..') // On affiche pas . et ..
					{
echo $file."<br>\n";
					}
			}
		closedir($dh); // on ferme la connection
		}
?>

C’est bien compliqué pour pas grand chose et il faut écrire beaucoup^^.


Voila ce qu’on obtient avec scandir:


<?php
$scandir = scandir("./");
	foreach ($scandir as $key => $value)
	{
		if(($value !== ".") AND ($value !== "..")) // On affiche pas . et ..
			{
		echo $value."<br>\n";	
			}
	}
?>


Comment aller plus loin ? Cette fonction va lister le contenu d’un dossier et de ces sous dossier avec opendir et readdir:


<?php
function listage_fichier($path)
{
        //On déclare le tableau qui contiendra tous les éléments de nos dossiers
        $tableau_elements = array();
  
        //On ouvre le dossier
        $dir = opendir($path);
  
        //Pour chaque élément du dossier...
        while (($element_dossier = readdir($dir)) !== FALSE)
        {
                //Si l'élément est lui-même un dossier (en excluant les dossiers parent et actuel), on appelle la fonction de listage en modifiant la racine du dossier à ouvrir
                if ($element_dossier != '.' && $element_dossier != '..' && is_dir($path.'/'.$element_dossier))
                {
                        //On fusionne ici le tableau grâce à la fonction array_merge. Au final, tous les résultats de nos appels récursifs à la fonction listage fusionneront dans le même tableau
                        $tableau_elements = array_merge($tableau_elements, listage_fichier($path.'/'.$element_dossier));
                }
                elseif ($element_dossier != '.' && $element_dossier != '..')
                {
                        //Sinon, l'élément est un fichier : on l'enregistre dans le tableau
                        $tableau_elements[] = $path.'/'.$element_dossier;
                }
        }
        //On ferme le dossier
        closedir($dir);
  
        //On retourne le tableau
        return $tableau_elements;
}
  
//On définit la racine
$path = '/var/www/dossier_test'; // simonbhb.fr/blog/
  
//Appel de notre fonction
$tableau_elements = listage_fichier($path);

// On classe par ordre croissant
asort($tableau_elements);

echo count($tableau_elements)." fichiers:<br>";

// On liste les fichiers avec une boucles:
	foreach ($tableau_elements as $key => $value)
	{
echo $value.'<br>';
	}
?>


Un autre exemple de la même fonction, mais avec scandir:


<?php
function listage_fichier($path)
{
        //On déclare le tableau qui contiendra tous les éléments de nos dossiers
        $tableau_elements = array();
  
        //On ouvre le dossier
        $dir = scandir($path);
  
        //Pour chaque élément du dossier...
        foreach ($dir as $key => $element_dossier)
        {
                //Si l'élément est lui-même un dossier (en excluant les dossiers parent et actuel), on appelle la fonction de listage en modifiant la racine du dossier à ouvrir
                if ($element_dossier != '.' && $element_dossier != '..' && is_dir($path.'/'.$element_dossier))
                {
                        //On fusionne ici le tableau grâce à la fonction array_merge. Au final, tous les résultats de nos appels récursifs à la fonction listage fusionneront dans le même tableau
                        $tableau_elements = array_merge($tableau_elements, listage_fichier($path.'/'.$element_dossier));
                }
                elseif ($element_dossier != '.' && $element_dossier != '..')
                {
                        //Sinon, l'élément est un fichier : on l'enregistre dans le tableau
                        $tableau_elements[] = $path.'/'.$element_dossier;
                }
        }
  
        //On retourne le tableau
        return $tableau_elements;
}
  
//On définit la racine
$path = '/var/www/dossier_test';
  
//Appel de notre fonction
$tableau_elements = listage_fichier($path);

echo count($tableau_elements)." fichiers afiché:<br>";

// On liste les fichiers avec une boucles:
	foreach ($tableau_elements as $key => $value)
	{
echo $value.'<br>';
	}
?>

Tous les codes sont testés et sont fonctionnels, si un de ces codes ne marche pas chez vous, merci de me le signaler.
Partager:
0.00 avg. rating (0% score) - 0 votes

Vous aimerez aussi...

Laisser un commentaire