[PHP] pblm pour Parser un dossier opendir

Résolu/Fermé
cedfid - 29 juin 2010 à 01:43
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 30 juin 2010 à 08:35
Bonjour,

J'ai un probleme sur le code ci-dessous
Il parse les fichiers photos dans un dossier et en affiche une au hazard
Pour détailler le script, je recupere le nombre de fichier dans le dossier, et je tombe donc sur une des variable au hazard en prenant en compte en limite, le nombre de fichier dans le dossier.
Seulement desfois je tombe sur une image impossible a ouvrir, je me dis que peux etre il veux ouvrir un fichier caché type thumb.db mais je pense avoir bloqué au jpg..

Pouvez vous m'aider ? merci

if (empty($filename)){


//nom du répertoire contenant les images à afficher
   $nom_repertoire = "uploads";

   // extensions acceptées
   $extensions_ok = array("jpg","gif","png","jpeg", "JPG", "GIF", "PNG", "JPEG"); 

   //on ouvre le repertoire
   $dossier = opendir($nom_repertoire);
   $i = 0;


	$photos = array();

   //on les stocke les noms de fichiers images dans un tableau
   while ($fichier = readdir($dossier))
   {     
   if(in_array(strtolower(substr($fichier, -3)),$extensions_ok)) $photos[] = $fichier;

   }
   
   //on ferme le répertoire
   closedir($dossier);


$count_photos = count($photos);
$count_photos = rand(0,$count_photos);

    echo "<img src=\"uploads/$photos[$count_photos]\" id=\"show\" >";
}
else {

    echo " <img src=\"uploads/$filename.jpg\" width=\"216\" /> ";

}




A voir également:

1 réponse

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
29 juin 2010 à 08:42
Bonjour,

Le mieux dans ce genre de cas, je veux dire, quand on est pas certain de son algorithme, c'est de mettre des traces un peu partout pour analyser où passer ton programme et avec quelle valeur pour les variables liées à ton problème.

Tu lance par la suite ton programme (ou tu visualise ta page dans le cas d'un site web) plusieurs fois, simulant les cas OK et les cas KO afin de comprendre ce qui peut clocher.

Applique ça à ton problème courant en affichant:
- la liste des fichiers qu'il teste et qui sont détectés comme ayant une bonne extension
- après ta boucle de recherche, le nombre d'images trouvée (taille du tableau donc), ainsi que l'indice généré "aléatoirement", et enfin, un aperçu de la valeur $photos[$count...] (tu peux aussi faire clic droit sur ton image-> propriété pour voir le chemin d'accès à l'image et ainsi déterminer cette valeur et voir si c'est le nom et chemin d'accès à une vraie image ou non, et ainsi savoir qu'est ce qui ne tourne pas rond dans ton programme.

Au besoin donne nous ici les traces qui s'affichent après en avoir mis.
1
Merci
J'ai testé en rajoutant
echo "$photos[$count_photos]<br>";


a la fin de ma page, et lorsque ma page bug, la valeur est NULL

je ne sais pas quoi faire d'autre
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
29 juin 2010 à 17:00
Si la valeur est NULL, c'est donc que tu pioches à un index dans ton tableau où il n'y a rien.
Le problème doit donc se situer lorsque tu remplis ton tableau.
Je serai toi, après avoir rempli le tableau, je tenterai d'en affiche l'intégralité de son contenu, on sera alors fixé si cela vient de là ou non. Et si c'est le cas, à toi de jouer pour réfléchir et savoir d'où vient le problème de remplissage. Si ce n'est pas le cas, faut voir autre chose.
0
j'ai résolu mon pblm
si la valeur en NULL il affiche la photo numéro 1 comme ca je connais pas le bug mais au moins il est réglé :)

if ($photos[$count_photos] == "")
echo "<img src=\"uploads/$photos[1]\" id=\"show\" >";
else {

    echo "<img src=\"uploads/$photos[$count_photos]\" id=\"show\" >";
}
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
30 juin 2010 à 08:35
Mouai... ou comment magouiller pour cacher une faute de code.
Ca risque de te retomber sur le coin du nez si tu ne le règle pas ;)
0