opendir() readdir() et ordre alphabétique

Eléphant du PHP | 172 Messages

19 sept. 2005, 11:37

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 ?

Mammouth du PHP | 19672 Messages

19 sept. 2005, 11:40

Oui, en stockant les noms des fichiers dans un tableau indexé et en faisant ensuite un tri sur le tableau avec asort()
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 568 Messages

19 sept. 2005, 11:41

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é.
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 172 Messages

19 sept. 2005, 14:58

Merci à vous deux !

J'ai finallement opté pour:

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

Mammouth du PHP | 568 Messages

19 sept. 2005, 15:10

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...
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 172 Messages

19 sept. 2005, 17:41

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.

Mammouth du PHP | 568 Messages

19 sept. 2005, 17:50

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...)
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007