Page 1 sur 4

Images aleatoires

Posté : 12 oct. 2010, 19:57
par Invité
Bonjour,

Je suis débutant en php. J'ai trouvé un script intéressant qui affiche des images de manière aléatoire, depuis un dossier. Le problème c'est que ce script me génère des "blancs", des moments ou il n'affiche pas d'image et je n'arrive pas a voir d'où vient le problème. Si quelqu'un peut me dépanner. Voici le code:
<?php
$directory = 'php/';
$image = array();
 if (is_dir($directory))
 {
 if ($dh = opendir($directory))
 {
 while (($file = readdir($dh)) !== false)
 {
 if ($file != '...' && $file != '..' && $file != '.')
 {
 $image[] = $file;
 }
 }
 closedir($dh);
 $total = count($image)-1;
 $aleatoire = rand(0, $total);
 $image_afficher = "$image[$aleatoire]";
 print "<img src='$directory/$image_afficher'>";
 }
 }
?>

Re: Images aleatoires

Posté : 12 oct. 2010, 21:52
par Aureusms
Bonjour,

Je suis débutant en php. J'ai trouvé un script intéressant qui affiche des images de manière aléatoire, depuis un dossier. Le problème c'est que ce script me génère des "blancs", des moments ou il n'affiche pas d'image et je n'arrive pas a voir d'où vient le problème. Si quelqu'un peut me dépanner. Voici le code:
<?php
$directory = 'php/';
$image = array();
 if (is_dir($directory))
 {
 if ($dh = opendir($directory))
 {
 while (($file = readdir($dh)) !== false)
 {
 if ($file != '...' && $file != '..' && $file != '.')
 {
 $image[] = $file;
 }
 }
 closedir($dh);
 $total = count($image)-1;
 $aleatoire = rand(0, $total);
 $image_afficher = "$image[$aleatoire]";
 print "<img src='$directory/$image_afficher'>";
 }
 }
?>
Que te donne ? (à placer après closedir($dh);)
<?php
var_dump ($image); 
?>

Re: Images aleatoires

Posté : 13 oct. 2010, 13:37
par Invité
Merci pour a réponse.

Retourne les infos suivantes:

array(5) { [0]=> string(12) "DSCN3836.jpg" [1]=> string(10) "image1.jpg" [2]=> string(10) "image3.jpg" [3]=> string(10) "image4.jpg" [4]=> string(9) "Thumbs.db" }

Re: Images aleatoires

Posté : 13 oct. 2010, 14:05
par Aureusms
Je crois qu'on vient de trouver le problème...
Thumbs.db n'est pas une image... tu ne peux donc pas l'afficher. Tu as donc deux choix :

1.soit faire un tri pendant la création du tableau en utilisant la fonction getimagesize() http://php.net/manual/fr/function.getimagesize.php qui retournera 0 à la largeur et à la longueur si ce n'est pas une image ou si c'est une image non traduite.
Pour cela tu fais :
while (($file = readdir($dh)) !== false)
{
 if ($file != '...' && $file != '..' && $file != '.')
 {
   list ($hauteur,$largeur,$type) = getimagesize($file);
   if ($hauteur != 0 && $largeur!= 0)
     $image[] = $file;
 }
}
ou tu vérifies par la même fonction lors de l'affichage mais c'est plus contraignant.

Re: Images aleatoires

Posté : 13 oct. 2010, 14:25
par stealth35
sinon avec un glob pour choisir les extensions :wink:

Re: Images aleatoires

Posté : 13 oct. 2010, 19:10
par Invité
Ok je vois...mais pourquoi il m'affiche ce Thumb.db ? Je suppose qu'il est généré lorsque je lance la page sur mon serveur...car il est absent de mon dossier contenant les images.
Le coup du glob serait en effet la solution la moins "compliqué" à mettre en œuvre et la plus conventionnelle, bien que celle de Aureusms ne soit pas difficile. Je vais me pencher sur le glob, mais bon, si vous avez des propositions je suis preneur ;), oui j'avoue je suis faignant!

Merci pour vos réponses en tout cas.

Re: Images aleatoires

Posté : 13 oct. 2010, 19:22
par Aureusms
Thumb.db est un fichier Windows caché.

Re: Images aleatoires

Posté : 14 oct. 2010, 20:23
par Invité
Bon décidément je ne suis pas un pro en php. J'ai essayer plusieurs techniques avec if...mais je n'ai que des messages d'erreur. Je sollicite donc encore votre aide. Pour thumb.db j'ai parlé trop vite, je savais que c'était un fichier Windows, comme quoi quand on réfléchis pas assez on raconte des sornettes.

Re: Images aleatoires

Posté : 14 oct. 2010, 20:25
par xTG
if ($file != '...' && $file != '..' && $file != '.' && $file != 'thumb.db')
Et avec ça ?

Re: Images aleatoires

Posté : 14 oct. 2010, 23:31
par Invité
Je viens de tester cette solution sans succès...toujours une image blanche correspondant a thumb.db...merci pour ta réponse.

Re: Images aleatoires

Posté : 14 oct. 2010, 23:42
par stealth35
sinon avec un glob pour choisir les extensions :wink:

Re: Images aleatoires

Posté : 15 oct. 2010, 09:49
par Aureusms
Je dirais plutôt :
if ($file != '...' && $file != '..' && $file != '.' && $file != 'Thumbs.db')

Re: Images aleatoires

Posté : 15 oct. 2010, 10:12
par stealth35
c'est censé correspondre a quoi ?
$file != '...'

Re: Images aleatoires

Posté : 15 oct. 2010, 10:18
par Aureusms
c'est censé correspondre a quoi ?
$file != '...'
A rien à mon avis.

Re: Images aleatoires

Posté : 15 oct. 2010, 13:14
par Invité
Toujours pareil...je suis preneur pour 'glob' mais je n'ai pas réussis a le mettre en œuvre...

Voici ce que j'ai pour le moment:

<?php
$directory = 'php/';
$image = array();
if (is_dir($directory))
{
if ($dh = opendir($directory))
{
while (($file = readdir($dh)) !== false)
{
if ($file != '...' && $file != '..' && $file != '.' && $file != 'thumbs.db')
{
$image[] = $file;
}
}
closedir($dh);
$total = count($image)-1;
$aleatoire = rand(0, $total);
$image_afficher = "$image[$aleatoire]";
print "<img src='$directory/$image_afficher'>";
}
}
?>