Page 1 sur 1

opendir() readdir() et ordre alphabétique

Posté : 19 sept. 2005, 11:37
par PhilFree
Bonjour à tous,

En utilisant opendir() et readdir(), y a-t-il moyen d'obtenir les fichiers triés par ordre alphabétique des noms de fichiers ?

Si oui, comment ?

Posté : 19 sept. 2005, 11:40
par Cyrano
Oui, en stockant les noms des fichiers dans un tableau indexé et en faisant ensuite un tri sur le tableau avec asort()

Posté : 19 sept. 2005, 11:41
par heddicmi
Je crois pas que tu puisses, mais tu peux contourner.

Utilise la fonction scandir. Tu récupère les noms des fichiers dans l'ordre... Tu parcours ensuite le tableau de résultats pour ouvrir tes fichiers dans l'ordre souhaité.

Posté : 19 sept. 2005, 14:58
par PhilFree
Merci à vous deux !

J'ai finallement opté pour:

readdir() stockage dans un array, puis sort() de cet array.

Posté : 19 sept. 2005, 15:10
par heddicmi
Je voudrais juste insiter sur le fait que scandir réalise ça stockage dans un array, puis sort() de cet array, tout seul...

Je sais pas ce qu'en pense Cyrano, mais pour ceux qui viendrais voir ce post pour le même soucis, je pense que ce serait à la fois plus simple et plus rapide...

Posté : 19 sept. 2005, 17:41
par PhilFree
Je voudrais juste insiter sur le fait que scandir réalise ça stockage dans un array, puis sort() de cet array, tout seul...
Salut heddicimi,

J'ai choisi sort() parce que j'ai lu que scandir() n'est pas compatible avec toutes les versions de PHP.

Pour te donner une meilleure idée, voici mon script:
<html>
<!-- 
------------ mettre ce fichier dans le répertoire des photos et le nommer index.php
------------ il affiche tous les fichiers *.jpg de ce répertoire
------------ by PhilFree 19.09.2005
-->
<head>
	<title>Diaporama</title>
</head>

<body>
<?php   
$repertoire= ".";
?>
<DIV ID=photo_box></div>
<script type="text/javascript">

photo = new Array;

titre = "Photos du site <a href="http://www.page.com/">page.com<\/a>";

titre += " 19 septembre 2005"      //-------------- date des photos

function aff_photos(num) 	{
	if(document.getElementById) {
		precedent = "";
		suivant = "";
		if(num!=0)
			precedent = "<A HREF=# onClick='aff_photos("+(num-1)+");return(false)'><- Précédente</A>";
		if(num!=(photo.length-1))
			suivant   = "<A HREF=# onClick='aff_photos("+(num+1)+");return(false)'>Suivante -></A>";

		// ---- Affichage de la photo et des liens suivant et précédent
		document.getElementById("photo_box").innerHTML =
      "<table><tr><td width="250">"
      + precedent + "</td><td align="center" width="150">Photo: " + (num+1) + "/" + (photo.length)
      + "</td><td align="right" width="150">" + suivant
      + "</td><td align="right">" + titre + "</td></tr><tr><td colspan="4"><IMG SRC="" + photo[num] + "" BORDER=0></td></tr></table>";

	}
}

<?php  // --------------- Création de l'array JavaScript contenant le nom des photos type nom.jpg
$a = 0;
$i = 0;
$handle = opendir($repertoire);
while (($file = readdir())!=false) {  // ---- lecture du répertoire
	clearstatcache();
	if(strtolower(substr($file,-4))==".jpg" ) { // ---- si c'est un fichier jpg on le met dans l'Array
		$files[$a] = $file;
		$a++;
	}
}
closedir($handle);

sort ($files); // ---- on trie l'Array contenant les noms de fichier

while ( $i < $a ) { // ---- on écrit l'Array JavaScript contenant les noms des photos
		echo "photo[$i] = ". ""$files[$i]";
		";
$i++;
}
?>

window.onload = new Function("aff_photos(0)");

</script>
</body>
</html>
Si tu penses qu'on peut faire mieux et plus court avec scandir() je suis preneur :!:

Encore merci à vous deux.

Posté : 19 sept. 2005, 17:50
par heddicmi
Sur le papier, une ligne :
$files=scandir($repertoire);
remplace les lignes :
$handle = opendir($repertoire); 
while (($file = readdir())!=false) {  // ---- lecture du répertoire 
    clearstatcache(); 
    if(strtolower(substr($file,-4))==".jpg" ) { // ---- si c'est un fichier jpg on le met dans l'Array 
        $files[$a] = $file; 
        $a++; 
    } 
} 
closedir($handle); 

sort ($files); // ---- on trie l'Array contenant les noms de fichier 
Mais maintenant, tu as dis le soucis... C'est utilisable à partir de php5... De plus, comme tu filtres sur les jpg seulement, scandir n'est plus vraiment approprié (bien qu'on peux filtrer ensuite lors du parcours du tableau de résultat...)