Afficher seulement des images dans un dossier avec php5

EricDesMontagnes
Invité n'ayant pas de compte PHPfrance

11 août 2008, 20:51

Bonjour, je suis en train de faire un petit script php5 pour afficher des images dans un dossier :
<?php
$ftype = 'image/jpeg'; 
$dir = new DirectoryIterator("pics/ascr/");
foreach ($dir as $file) {
   if ($file->isDot()) {
       continue;}
	$finfo = new finfo(FILEINFO_MIME);
	$fres = $finfo->file($file); 
	if (is_string($fres) && !empty($fres)) { 
   $ftype = $fres;
 print $file->getFilename();
}
}
?>
En fait ce qui pose problème c'est le test pour savoir si c'est bien une image. Vous n'auriez pas une idée ?

ViPHP
AB
ViPHP | 5818 Messages

12 août 2008, 04:25

$fres te retourne quoi ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 août 2008, 10:15

Y a pas un p'tit soucis avec ton $ftype ? tu le définis d'abord comme étant égal à 'image/jpeg' et ensuite tu l'écrase avec ce qui est je suppose le type mime du fichier... (en gros il ne sert à rien).

La première question à te poser c'est comment faire pour savoir si un fichier est une image ou non ? Le plus simple est en effet de tester le type mime ou l'extension. Il te faut alors définir une liste de valeur autorisées (soit uniquement du jpg, soit également des gif, png, ...), les comparer au fichier que tu traites et en fonction du résultat, afficher ou non celui-ci :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

EricDesMontagnes
Invité n'ayant pas de compte PHPfrance

12 août 2008, 20:13

Si justement y'a un soucis :'( j'arrive pas à tester le type mime du fichier

ViPHP
AB
ViPHP | 5818 Messages

13 août 2008, 04:29

Si $fres ne te retourne rien sur un fichier existant c'est que l'extension PECL n'est pas installée sur ton serveur.
Si tu ne peux pas l'installer il faudra utiliser mime_content_type() ou tester l'extension avec un bout de code (ex: $Ext = strtolower(strrchr(basename($fichier),'.')); pas fiable si ce ne sont pas des personnes de confiance qui postent des images sur ton serveur) ou encore utiliser la fonction getimagesize().