Afficher une image aléatoirement
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 src="',$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.


Super sympa ce tuto. Il est très bien commenté et
Chris | samedi 16 décembre 2006 | 15:36Super 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
dwogsi | samedi 16 décembre 2006 | 17:30Merci!
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
ERCI Informatique | lundi 6 août 2007 | 19:15--- 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
NiklosKoda | samedi 13 octobre 2007 | 21:04Sympatiques 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
Dwogsi | mardi 6 novembre 2007 | 22:05Merci 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
ERCI nformatique | dimanche 18 novembre 2007 | 01:23Pour 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
dwogsi | dimanche 18 novembre 2007 | 15:46Bon 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.
Super! Juste rectifié scr par src ... Keske j'ai
Marco | samedi 10 janvier 2009 | 00:32Super!
Juste rectifié scr par src ...

Keske j'ai cherché...
idem pour: echo '
MARCO | samedi 10 janvier 2009 | 00:37
idem pour:
echo '<img scr="',$dir,$image_list[$i],'" alt="Image aleatoire" />';
il faut virer le / pour avoir ce code:
echo '<img scr="',$dir,$image_list[$i],'" alt="Image aleatoire" >';
J'ai corrigé le src. En revanche je maintiens le
Thierry | dimanche 11 janvier 2009 | 15:14J'ai corrigé le src. En revanche je maintiens le /.
Hello, Tout d'abord bravo et merci pour ce tuto
Tootafonk | jeudi 5 mars 2009 | 14:34Hello,
Tout d'abord bravo et merci pour ce tuto précis et très bien commenté... on ne peut plus clair !!!
Mais... mon niveau étant ce qu'il est je me heurte à qques difficultés...
J'ai suivi scrupuleusement les indication fournies (enfin il me semblait) et voilà le message d'erreur que je récolte :
Parse error: syntax error, unexpected ';' in /homepages/.../.../ma-page.php on line 59
le ligne 59 est la suivante :
$i=mt_rand(0,count($image_list)-1;
...??? Keskiss Pass ???
Ai-je bien fait de mettre mes 2 bouts de script consécutivement dans ma page html à l'endroit où je souhaite voir s'afficher les images ?
Merci d'avance de vos lumières !
Une erreur de copier/coller. Il manque une
Thierry | jeudi 5 mars 2009 | 15:16Une erreur de copier/coller. Il manque une parenthese dans la ligne juste avant le point virgule.
je reprends ma question et je retourne jouer aux
tootafonk | jeudi 5 mars 2009 | 16:33je reprends ma question et je retourne jouer aux billes !!!
-> tout fonctionne à merveille dès lors qu'on sait lire et qu'on met les parenthèses là où elles doivent être !...
Désolé.
Merci au modérateur de supprimer mon post et de m'épargner ainsi les railleries de mes congénères !
Hey! Your blog is totally awesome, I enjoy reading
seo software | vendredi 29 juillet 2011 | 18:14Hey! Your blog is totally awesome, I enjoy reading it since I founded it in google on the first place. But why you are so deep for other search queries? It’s really unfair. I recommend you to use ProChecker to improve your Google rankings (you can explore more about it clicking on the link in the URL field - it’s not a spam, of course, just a friendly advice). Please Keep writing! Best regards, Steve.
http://prochecker.net