Lire et trier le contenu d'un répertoire

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Il existe de nombreuses façons pour lire, afficher et trier le contenu d'un dossier. Ici, je vous en montre une testé et fonctionnel en local (WampServer), chez l’hébergeur Free.fr et sur l’hébergeur 1&1.

Lire et afficher le contenu d'un dossier

<?php
//Nom du dossier à scanner
$nom_du_dossier = '.';
//scandir — Liste les fichiers et dossiers dans un dossier
$tableau = scandir($nom_du_dossier);
//On boucle
foreach($tableau as $valeur){
    echo '<a href="'.$valeur.'">'.$valeur.'</a><br/>';
}   
?>
Si on effectue un print_r($tableau);  juste après la ligne $tableau = scandir($nom_du_dossier); , on obtient le résultat suivant :
Array
(
    [0] => .
    [1] => ..
    [2] => dossier1
    [3] => dossier2
    [4] => dossier3
    [5] => fichier1.php
    [6] => fichier2.php
)
 Pour rappel, les chiffres entre crochet sont les "clés" et après les flèches se trouve les "valeurs".

Supprimer l’arborescence des dossiers

Comme vous l'avez remarqué, nous avons dans le tableau juste au dessus un point (.) et double point (..) qui sont inutiles. Pour les supprimer du tableau, on utilise la fonction array_slice() qui permet d'extraire une portion du tableau.
<?php
//Nom du dossier à scanner
$nom_du_dossier = '.';
//scandir — Liste les fichiers et dossiers dans un dossier
$tableau = scandir($nom_du_dossier);
//array_slice — Extrait une portion de tableau | on supprime . et ..
$tableau = array_slice($tableau, 2);
//On boucle
foreach($tableau as $valeur){
    echo '<a href="'.$valeur.'">'.$valeur.'</a><br/>';
}   
?>
On obtient maintenant le tableau suivant :
Array
(
    [0] => dossier1
    [1] => dossier2
    [2] => dossier3
    [3] => fichier1.php
    [4] => fichier2.php
)

Trier le contenu d'un dossier

 Les variables ci-dessous et selon le mode de trie que vous souhaitez obtenir, se placent juste avant la boucle foreach().

Trie croissant du tableau sur la valeur
sort($tableau);
Trie décroissant du tableau sur la valeur
rsort($tableau);
Trie aléatoire du tableau sur la valeur
shuffle($tableau);
Trie croissant du tableau sur la clé
ksort($tableau);
Trie décroissant du tableau sur la clé
krsort($tableau);
Exemple d'un trie aléatoire :
<?php
$nom_du_dossier = '.';
$tableau = scandir($nom_du_dossier);
$tableau = array_slice($tableau, 2);
//Trie alléatoire du tableau
shuffle($tableau);
foreach($tableau as $valeur){
    echo '<a href="'.$valeur.'">'.$valeur.'</a><br/>';
}   
?>

Limiter le nombre d'élément à afficher

Un fois de plus, on utilise la fonction array_slice() qui permet d'extraire une portion du tableau.
$tableau = array_slice($tableau, 0, 6);
Dans cet exemple, 0 et 6 correspondent aux clés du tableau. On demande donc à la fonction d'extraire les 6 premiers éléments du tableau.
 <?php
$nom_du_dossier = '.';
$tableau = scandir($nom_du_dossier);
$tableau = array_slice($tableau, 2);
//Extrait les 6 premières entrées du tableau
$tableau = array_slice($tableau,0 , 6);
foreach($tableau as $valeur){
    echo '<a href="'.$valeur.'">'.$valeur.'</a><br/>';
}   
?>

 Supprimer une valeur du tableau

 Dans certains contextes, il peut être utile de supprimer une entrée d'un tableau. Prenons par exemple un dossier contenant des photos. Ce dossier contient également un simple fichier "index.php" afin d'éviter que le serveur affiche l'arborescence du dit dossier sous forme de liste comme c'est le cas chez Free.fr.
Pour supprimer le fichier "index.php" du tableau, on effectue une recherche du fichier avec la fonction array_search() puis on détruit la variable (clé et valeur) avec la fonction unset().
unset($tableau[array_search('index.php', $tableau)]);
Exemple :
 <?php
$nom_du_dossier = '.';
$tableau = scandir($nom_du_dossier);
$tableau = array_slice($tableau, 2);
//unset — Détruit une variable
//array_search — Recherche dans un tableau la clé associée à une valeur
unset($tableau[array_search('index.php', $tableau)]);
foreach($tableau as $valeur){
    echo '<a href="'.$valeur.'">'.$valeur.'</a><br/>';
}   
?>
 Bonus du tutoriel 

Avec un peut d'imagination, un poil de CSS couplé au script Fancybox, vous pouvez obtenir une petite galerie d'image bien sympathique que vous pouvez voir sur ce site : Coiffure à domicile .

Code PHP :
<?php
//Adresse des miniatures
$adresse_miniature = "./photos/mini/";
//Adresse des images de taille normal
$adresse_normal = "./photos/normal/";
//scandir — Liste les fichiers et dossiers dans un dossier
$tableau = scandir($adresse_miniature);
//On supprime . et ..
$tableau = array_slice($tableau, 2);
//On supprime index.php
unset($tableau[array_search('index.php', $tableau)]);
//Mélange les éléments d'un tableau
shuffle($tableau);
//On garde les 6 premières images
$tableau = array_slice($tableau, 0, 6);
//On boucle sur le tableau
foreach($tableau as $image){
    echo '<a title="Photo" rel="example_group" href="'.$adresse_normal.$image.'"><image class="image-miniature" src="'.$adresse_miniature.$image.'" alt="photo"/></a>';
}
?>
 Le style CSS :
.image-miniature{
background:#FFF;
margin:5px;
padding:5px;
-moz-box-shadow: 8px 8px 12px #aaa;
-webkit-box-shadow: 8px 8px 12px #aaa;
box-shadow: 8px 8px 12px #555;
transform:rotate(-10deg);-moz-transform:rotate(-10deg);-webkit-transform:rotate(-10deg);-khtml-transform:rotate(-10deg);
}
Appel aux fichiers et méthode d'affichage :

Dans l'entête de votre document (entre <head> et </head>) placez le code ci-dessous :
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script type="text/javascript" src="./fancybox/jquery.mousewheel-3.0.4.pack.js"></script>
<script type="text/javascript" src="./fancybox/jquery.fancybox-1.3.4.pack.js"></script>
<link rel="stylesheet" type="text/css" href="./fancybox/jquery.fancybox-1.3.4.css" media="screen" />
<script type="text/javascript">
$(document).ready(function() {
	$("a[rel=example_group]").fancybox({
		'transitionIn'		: 'elastic',
		'transitionOut'		: 'elastic'
	});			
});
</script>
Note : Chez Free.fr, il faut activer php5 pour que certaines fonctions présent dans ce tutoriel fonctionnent. Pour ce faire, créez un simple fichier ".htaccess" à la racine de votre site contenant juste la ligne "php 1" (sans les guillemets!).
Voir/déposer un commentaire (0) | Signaler un problème