Affichage image aléatoire à partir d'un dossier

Mammouth du PHP | 859 Messages

26 avr. 2005, 16:16

Comme j'ai vu que pas mal de monde avait du mal avec les fonctions de recherche dans un dossier, je me suis décidé à poster un morceau de script que je viens de finir et qui a pour but d'afficher une image aléatoire à partir d'un dossier quelconque.
<?php
	########################################
	#
	# Affichage image aléatoire //manucci.info
	#
	########################################

	//On indique le dossier images
	$chem_img = "./images";
	//On ouvre le dossier images
	$handle  = opendir($chem_img);
	
	//On parcoure chaque élément du dossier
	while ($file = readdir($handle))
		{
			//Si les fichiers sont des images
			if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))
				{
					$listef[] = $file;
				}
		}
	
	$random_img = rand(0, count($listef)-1); //permet de prendre une image totalement au hasard (RANDom) parmi toutes les images trouvées.
	
	//On calcule la largeur et la hauteur de l'image aléatoire
	$size = getimagesize($chem_img."/".$listef[$random_img]);
	
	//Largeur maximale de l'image pour la création des miniatures
	$largeur_maxi = 180;
	//Si la largeur dépasse la limite autorisée...
	if ($size[0] > $largeur_maxi)
		{
			//...la nouvelle largeur est égale à la limite à ne pas dépasser
			$width = $largeur_maxi;
			//La largeur d'origine divisée par la largeur limitée (on obtient un chiffre qui sert à faire la même proportion pour la hauteur)
			$theight = ($size[0]/$largeur_maxi);
			//La hauteur originale est divisée par le chiffre obtenu précédemment afin que l'image conserve les mêmes proportions que l'originale (mais en mode vignette)
			$height = ($size[1]/$theight);
		}
	else
		{
			//Sinon on garde la taille originale
			$width = $size[0]; $height = $size[1];
		}
	//On affiche l'image aléatoire (en respectant les standards ! :) )
	echo "<a href=\"".$chem_img."/".$listef[$random_img]."\" onclick=\"window.open(this.href,'_blank');return false;\"><img style=\"border: none; width: ".$width."px; height: ".$height."px\" src=\"".$chem_img."/".$listef[$random_img]."\" alt=\"".$listef[$random_img]."\" /></a>";
	//On ferme le dossier
	closedir($handle);
?>
L'exemple est à consulter ici : http://www.manucci.info (menu de droite)
Modifié en dernier par flitox le 13 nov. 2007, 18:01, modifié 18 fois.

Eléphant du PHP | 139 Messages

27 avr. 2005, 14:38

Ah ça, ça va bien me servir.

Merci flitox. :wink:

Mammouth du PHP | 859 Messages

27 avr. 2005, 18:46

Si ça peut servir j'en suis ravi :D

Petit nouveau ! | 1 Messages

30 mai 2006, 12:43

Bonjour,
Le code pour générer les images aléatoirement marche "bien" mais j'ai tout de même de temps en temps ce message.

Warning: getimagesize() [function.getimagesize]: Read error! in /mnt/117/sdb/3/d/usdathle/image_aleatoire.php on line 32

Est ce que quelqu'un pourrait m'aider car pour une fois que je trouve enfin ce que je voulais avec les images ce serait bête que ça ne fonctionne pas

merci à vous

Mammouth du PHP | 859 Messages

30 mai 2006, 14:07

Bouriquet59, j'ai répondu à ton mail mais je vais quand même remettre la réponse ici pour les autres et corriger le problème dans le script :

Dans le script, j'avais écris ça :

Code : Tout sélectionner

if($file != '..' && $file !='.')
Or il se peut qu'un fichier Thumbs.db se soit glissé là pour peu que vous n'affichiez pas les fichiers cachés.

Donc on peut contrer ce problème en mettant ça (solution que je viens d'envoyer par mail à bouriquet59) :

Code : Tout sélectionner

if($file != '..' && $file !='.' && file !='Thumbs.db')
Ou encore beaucoup mieux :

Code : Tout sélectionner

if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))

En effet ce dernier permet d'exclure de la recherche tout ce qui n'est pas une image.

Eléphanteau du PHP | 12 Messages

05 mars 2007, 00:03

Tout à fait ce que je recherchais et comme disait Ernesto Guevara «Soyons réalistes, demandons l'impossible.»

Mon impossible, c'est comment changer les images toutes les 3 secondes(ou 4, etc.) un peu comme un diaporama.
Quelles sont les ajouts à ce très bon code ?
amitiés,
Pierre AP

Mammouth du PHP | 991 Messages

08 mars 2007, 13:12

en mettant dans ton html :
<meta refresh=3>
ou un truc du genre ....
DevOps, Symfony4, Hoa

Eléphant du PHP | 445 Messages

08 mars 2007, 18:56

Ou bien en regardant un peu du côté du Javascript, qui pourrait rappeler le script php toutes les X secondes pour changer l'image peut-être.
LLDC
Ulti

Eléphanteau du PHP | 12 Messages

09 mars 2007, 21:23

Bonjour thehawk et Ultim4T0m,
Je vous remercie pour vos informations.

Pour <meta refresh=3>, je l'ai essayé avec les autres metas dans le head, pas un bon résultat avec moi. Et dans le html, pas de succès non plus.

Quant au Javascript, je n'en raffole pas trop. C'est peut-être pour cela que je n'en ai pas trouvé non plus.

Merci encore,

Pierre AP

Mammouth du PHP | 991 Messages

09 mars 2007, 21:57

essaye plutot : <META HTTP-EQUIV="Refresh" CONTENT="3"> qui plus W3C ^^
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 12 Messages

09 mars 2007, 23:30

Eh bien mon ami thehawk,

Ça marche parfait !
Je crois que tu pourrais changer ta signature. Moi, je te trouve pas mal bon !!

Amitiés, Pierre AP

PS J'aime beaucoup ton site et je t'ai «emprunté» ton texte sur le «Che»
http://ppzx.net/diversche.php5

Je viens de m'apercevoir qu'on ne peut pas lire la fin... Bizarre, il ne faisait pas ça avant. Enfin, j'y vois.

Mammouth du PHP | 991 Messages

09 mars 2007, 23:46

Mais euh mon texte euh .... c'est pas bien grave ^^ et non je ne vois pas de probleme sur le texte (enfin sur mon site -_-)de toute facon je travaile sur une nouvelle version du site
DevOps, Symfony4, Hoa

Eléphanteau du PHP | 12 Messages

10 mars 2007, 00:17

reBonjour thehawk,

Je voulais parler de ta signature ici, sur le post juste avant... ah ah ah !

N'empêche que je te remercie, car ça marche et c'est valide W3C:
<meta http-equiv="refresh" content="3" />

Pour mon site qui n'affichait pas tout, je crois que ça venait du «height» en mettant 100%, au lieu d'une mesure en pixels, ça a l'air d'aller.

Amitiés, Pierre AP

Petit nouveau ! | 1 Messages

24 mars 2007, 16:01

Bonjour,

merci pour ce super script
savez vous comment adapter ce script pour afficher des swf de meme taille et non des images ?

merci
Gfranque

Eléphanteau du PHP | 12 Messages

24 mars 2007, 17:58

bonjour gfranque,

À ma connaissance, swf est plus rapide. Par contre, c'est un logiciel propriétaire et tu dois te relier à un URL extérieur à ton site, avec tous les dangers que cela peut comporter.

Voici ce que j'ai déjà utilisé quand je faisais mes choix :

Code : Tout sélectionner

<object type="application/x-shockwave-flash" data="http://www.estvideo.com/dew/media/dewplayer.swf?mp3=Mon_URL/mon_dossier/mon_fichier.mp3" width="200" height="20"> <param name="movie" value="http://www.estvideo.com/dew/media/dewplayer.swf?mp3=mon_dossier/mon_fichier.mp3" /> </object>
Danc ce cas-là je voulais faire tourner un mp3. Cela marche aussi avec un fichier swf. Il faut alors changer les dimensions (width="200" height="20").
Comme je suis débutant, je souhaite qu'un(e) plus expérimenté(e) vérifie ces informations.
Amitiés, Pierre AP