Aller au contenu

problème affichage aléatoire d image


nico_papy

Sujets conseillés

salut a tous, désolé d'innonder le forum de problèmes mais me voila confronter au problème suivant :

j'ai un script en php d' affichage d' images aléatoires qui est le suivant :

<?php 
//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 ne sont pas des images
if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))
{
$listef[] = $file;
}
}

rand(0, count($listef)); //permet de prendre une image totalement au hasard (RANDom) parmi toutes les images trouvées.
$random_img = rand(0, count($listef));

//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);
?>

les images s'affichent correctement mais de temps en temps j'ai un message d' erreur qui s' affiche et qui est le suivant :

Warning: getimagesize() [function.getimagesize]: Read error! in /mnt/111/sdb/5/8/pl4ymobil/site1/index.php on line 128

merci d' avance à tous, j'ai chercher sur internet mais n'est trouvé aucune réponse. je compte sur votre aide !

@+++++ !!

Modifié par nico_papy
Lien vers le commentaire
Partager sur d’autres sites

Tout simplement parce que tu essaie d'accéder à une image qui n'existe pas.

Il faut utiliser

rand(0, count($listef)-1);

au lieu de

rand(0, count($listef));

Les images sont numérotées à partir de listef[0] ;)

Dan

Lien vers le commentaire
Partager sur d’autres sites

  • 3 months later...

Merci pour cet excellent code qui marche TB avec FF, Camino, Mozilla, Safari...

Et qui ne fonctionne pas avec Opéra qui ne bouge pas du tout chez moi et, donc ne change pas de photo !

http://ppzx.net/docs.php5

et le code php :

<?php
//On indique le dossier images
$chem_img = "./photos";
//On ouvre le dossier images
$handle = opendir($chem_img);

//On parcoure chaque lment du dossier
while ($file = readdir($handle))
{
//Si les fichiers ne sont pas des images
if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))
{
$listef[] = $file;
}
}

rand(0, count($listef)-1); //permet de prendre une image totalement au hasard (RANDom) parmi toutes les images trouves.
$random_img = rand(0, count($listef));

//On calcule la largeur et la hauteur de l'image alatoire
$size = realpath($chem_img."/".$listef[$random_img]);

//Largeur maximale de l'image pour la cration des miniatures
$largeur_maxi = 600;
//Si la largeur dpasse la limite autorise...
if ($size[0] > $largeur_maxi)
{
//...la nouvelle largeur est gale la limite ne pas dpasser
$width = $largeur_maxi;
//La largeur d'origine divise par la largeur limite (on obtient un chiffre qui sert faire la mme proportion pour la hauteur)
$theight = ($size[0]/$largeur_maxi);
//La hauteur originale est divise par le chiffre obtenu prcdemment afin que l'image conserve les mmes 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 alatoire (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);
?>

Avez-vous une idée ? Merci d'avance,

Pierre AP

Modifié par pandrekano
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...