14dec 2006
Afficher une image aléatoirement
20:37 - Par Thierry Geindre - PHP - 7 commentaires
Les script affichant une image aléatoirement sembles à la fois très recherchés et très difficiles à trouver puisqu'en parcourant les forums de programmation j'ai souvent vu des demandes qui en parlais. Je propose donc ici d'expliquer comment créer, en php, un script de sélection et affichage aléatoire d'une image parmis celles contenus dans un répertoire précis.
On supposera ici que le répertoire en question ne contient que des images. On ne fera donc aucun test sur le type de fichier trouvé dans celui-ci.
La première étape est de choisir un répertoire et d'en lire le contenu. En effet on commencera, dans notre script, par établir la liste des images disponibles. Pour cela on utilisera le code suivant :
<?php // On stock le répertoire dans une variable // on l'utilisera de nouveau par la suite dans le code $dir = "./images/"; // On ouvre le répertoire pour se préparer // à le lire $opened_dir = opendir($dir); // On vérifie que l'ouverture du répertoire à bien // fonctionnée, sinon on arrête là.... if(!$opened_dir) die('Erreur'); // On créé un tableau destinné à contenir la // liste des images disponibles $image_list = array(); // On créé une variable $i pour parcourir le tableau // ainsi créé $i = 0; // On boucle tant que l'on peut y lire queque chose while ( ($file = readdir($opened_dir)) !== FALSE ) { // On contrôle que nous sommes bien en présence d'un // fichier et non pas d'un répertoire if( is_file($dir.$file) ) { // On stock l'image dans le tableau d'image $image_list[$i] = $file; // On incrémente la variable de parcourt de 1 // pour ne pas écraser l'enregistrement avec // le suivant $i++; } } // Et on finit par fermer le répertoire ouvert closedir($opened_dir); ?>
Avec la portion de code précédente, on obtient un tableau contenant la liste compléte des images se trouvant dans le répertoire choisit. La suite n'est donc plus très compliquée. Il suffit de créer aléatoirement un nombre compris entre 0 et le nombre d'éléments -1 du tableau (le premier élément d'un tableau est l'élément 0, donc le dernier correspond aux nombres d'éléments -1) et de l'utiliser comme indice du tableau pour obtennir l'image correspondante.
Le code à utiliser pour la suite est donc le suivant :
<? // On réutilise $i pour stocker le nombre aléatoire // on lui donne donc une valeur grace à la fonction mt_rand() de // génération de nombres aléatoires $i = mt_rand(0,count($image_list)-1); // Enfin on renvoit le code html nécessaire pour afficher l'image // dans une page web echo '<img scr="',$dir,$image_list[$i],'" alt="Image aleatoire" />'; ?>
L'action finale de ce script est de renvoyer le code html nécessaire à l'affichage de l'image. Notez que ce n'est qu'une possibilité parmis d'autres. L'important est de se souvennir que la concaténation des variables $dir et $image_list[$i] donne le chemin complet vers l'image.
7 commentaires
Super sympa ce tuto. Il est très bien commenté et donc facilement compréhensible. Très utile pour son site perso
Bravo à toi dwogsi
Merci!
Bon ce n'est qu'un début et faut voir ce que ce site peut donner dans le temps. Mais si je m'y met sérieusement ça devrait aller!
--- crée par moi meme, pour ----, est un script permettant d'afficher aléatoirement les images d'un repertoire définit. Ce script est diffusé egalament sur -- à l'URL ci-dessous.
Modération par Dwogsi :
D'une part ceci n'est pas un espace publicitaire dans lequel vous pouvez faire la publicité de vos codes sources, d'autres part le but ici est de fournir des script avec des explicatsions sur leurs fonctionnement. Ce n'est pas le cas du script donné ici (qui a été supprimé).
Sympatiques petit script, j'y vois néanmoins trois petites améliorations possibles :
- il faut vérifier que l'ouverture du dossier n'as pas échoué
Exemple : if(($opened_dir = opendir($dir)) !== FALSE)
- Il faut vérifier que ce qui est retourné par readdir n'est pas équivalent à false (exemple : un fichier ayant pour nom "0")
Exemple : while(($file = readdir($opened_dir)) !== FALSE)
- Pas besoin de variable incrémentée pour le tableau, on peut laisser $image_list[] = $file;
Voila voila,
bonne continuation
Merci NiklosKoda pour ces bonnes remarques. J'ai tenu compte des deux premières avec quelques test supplémentaires.
Par contre pour la dernière, j'estime qu'on ne va pas chipoter pour un int, d'autant plus qu'on l'utilisera pour autre chose par la suite. Enfin il me semble que ça facilite la compréhension pour un débutant. Question de point de vue. De publique aussi peut-être.
Précisons en passant que pour PHP un booléen à FALSE et une string ayant pour valeur 0 c'est pareil, d'où le test du while qui avec !== contrôle également le type. Ceci évite qu'on quitte la boucle avec un fichier ou un répertoire nommé 0.
Enfin bon... ça ne devrait logiquement pas arriver si l'on tient compte du fait que le répertoire ouvert n'est censé contenir que des images.
Pour ma part, j'ai déjà crée un script tel que celui-ci (dipo sur ERCI Informatique ou directement chez Need Script à l'URL www.needscripts.com/Resou...
Bon je veux bien que vous postiez des liens vers vos script, mais évitez de poster des bloques énormes de code dans les commentaire, ce n'est absolument pas prévu pour. Ça m'évitera d'avoir à y supprimer. Merci.
Fil des commentaires de ce billet