Images aleatoires

Invité
Invité n'ayant pas de compte PHPfrance

12 oct. 2010, 19:57

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'>";
 }
 }
?>

ViPHP
ViPHP | 1996 Messages

12 oct. 2010, 21:52

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); 
?>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

13 oct. 2010, 13:37

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" }

ViPHP
ViPHP | 1996 Messages

13 oct. 2010, 14:05

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.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 5462 Messages

13 oct. 2010, 14:25

sinon avec un glob pour choisir les extensions :wink:

Invité
Invité n'ayant pas de compte PHPfrance

13 oct. 2010, 19:10

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.

ViPHP
ViPHP | 1996 Messages

13 oct. 2010, 19:22

Thumb.db est un fichier Windows caché.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

14 oct. 2010, 20:23

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.

ViPHP
xTG
ViPHP | 7331 Messages

14 oct. 2010, 20:25

if ($file != '...' && $file != '..' && $file != '.' && $file != 'thumb.db')
Et avec ça ?

Invité
Invité n'ayant pas de compte PHPfrance

14 oct. 2010, 23:31

Je viens de tester cette solution sans succès...toujours une image blanche correspondant a thumb.db...merci pour ta réponse.

ViPHP
ViPHP | 5462 Messages

14 oct. 2010, 23:42

sinon avec un glob pour choisir les extensions :wink:

ViPHP
ViPHP | 1996 Messages

15 oct. 2010, 09:49

Je dirais plutôt :
if ($file != '...' && $file != '..' && $file != '.' && $file != 'Thumbs.db')
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 5462 Messages

15 oct. 2010, 10:12

c'est censé correspondre a quoi ?
$file != '...'

ViPHP
ViPHP | 1996 Messages

15 oct. 2010, 10:18

c'est censé correspondre a quoi ?
$file != '...'
A rien à mon avis.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

15 oct. 2010, 13:14

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'>";
}
}
?>