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

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

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