v4np13 Posté 13 Avril 2006 Partager Posté 13 Avril 2006 (modifié) Bonjour, je suis en train d'essayer de génerer mes bannières pour avoir un affichage aléatoire, pour le moment j'utilise ce code mais chaque fois que l'image n'est pas présente dans le répertoire, il m'affiche un warning. <?$background= "../galleriecda/bannieres/ff.jpg";while (!file($background)){ $section = "acc"; $numimage = rand(1,20); $extension = "jpg"; $background = "../galleriecda/bannieres/bancda".$section."_".$numimage.".".$extension;}?> 1/ Comment pourrais-je faire pour ne pas avoir les warning? 2/ Existe-il un équivalent à "repeat" de Delphi en PHP? Merci d'avance <edit> J'avais oublié de vous montrer quel warning il me donnait: Warning: file(http://coeurdelardenne.info/galleriecda/bannieres/bancdaacc_2.jpg): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/999c0bdfb68d1d1b24a9076e2b196adb/web/include/header_.php on line 11 </edit> Modifié 13 Avril 2006 par v4np13 Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 13 Avril 2006 Partager Posté 13 Avril 2006 Essaye de tester l'existence de l'image avec file_exists. Lien vers le commentaire Partager sur d’autres sites More sharing options...
v4np13 Posté 13 Avril 2006 Auteur Partager Posté 13 Avril 2006 Avec file_exists, il m'affiche un fatal error: Fatal error: Maximum execution time of 10 seconds exceeded in /home/www/999c0bdfb68d1d1b24a9076e2b196adb/web/include/header_.php on line 11 J'avais remplacé while (!file($background)){ par while (!file_exists($background)){ Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 13 Avril 2006 Partager Posté 13 Avril 2006 Là, ce n'est pas dû à la fonction, mais au fait qu'au bout de 10 secondes, le script ait enclenché une sécurité lui permettant de ne pas boucler infiniment. Tu es sûr d'avoir des fichiers du type bancdaacc_X.jpg (où 1<X<20) ? Sinon, personnellement, je te conseillerais une autre méthode : - Chaque catégorie de bannières dans un sous-répertoire spécifique - Avec readdir, tu listes tous les fichiers de ton dossier dans un array - avec array_rand, tu choisis un de ces fichiers au hasard - et tu affiches l'image retournée. Ca t'évitera de faire des boucles 'à vide'. Lien vers le commentaire Partager sur d’autres sites More sharing options...
v4np13 Posté 13 Avril 2006 Auteur Partager Posté 13 Avril 2006 J'aurais préféré éviter de lister,... donc générer et tester Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 13 Avril 2006 Partager Posté 13 Avril 2006 Si tu listes, tu le fais une fois pour chaque bannière, alors que si tu génères un nom au petit bonheur, tu devras tester jusqu'à ce que ce fichier existe réellement. Cela peut être beaucoup plus long, non ? Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
v4np13 Posté 13 Avril 2006 Auteur Partager Posté 13 Avril 2006 Mon client supposait qu'il y ait 100bannières, si je les liste toutes avant de choisir, ça me prendrait + de temps que générer et tester, non? Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 13 Avril 2006 Partager Posté 13 Avril 2006 (modifié) J'ai pas de bench sous la main, mais je doute que lister 100 fichiers, soit si lent que ça. Modifié 13 Avril 2006 par captain_torche Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 13 Avril 2006 Partager Posté 13 Avril 2006 Bonjour Il vaut mieux lister : En asp, je traite 1500 fichiers en 3 secondes... Donc pour 100, sauf si tu es sur un pentium 75, ca devrait pas poser de problèmes Portekoi Lien vers le commentaire Partager sur d’autres sites More sharing options...
v4np13 Posté 13 Avril 2006 Auteur Partager Posté 13 Avril 2006 (modifié) bancdaacc_1.jpg bancdaacc_2.jpg jusque 5. Je viens d'appronfondir mes tests avec file_exists, j'ai réduis ma boucle pour qu'elle aille de 1 à 5 (les images existent), il m'affichait le fatal error. Je suis revenu avec !file($background), cela fonctionne sauf que si je veux supprimer par exemple l'image banccdaacc_4.jpg il risque de m'afficher le warning: Warning: file(http://coeurdelardenne.info/galleriecda/bannieres/bancdaacc_4.jpg): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/www/999c0bdfb68d1d1b24a9076e2b196adb/web/include/header_.php on line Comment l'éviter? Modifié 13 Avril 2006 par v4np13 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 13 Avril 2006 Partager Posté 13 Avril 2006 Un petit essai en local: il me faut moins de 4/100èmes de seconde pour lister une centaine de fichiers sur mon vieux PC Lien vers le commentaire Partager sur d’autres sites More sharing options...
v4np13 Posté 13 Avril 2006 Auteur Partager Posté 13 Avril 2006 Ok bah je vais creuser dans cette direction alors Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 13 Avril 2006 Partager Posté 13 Avril 2006 Un bout de code pour tester chez toi: <?php$time_start = microtime();if ($handle = opendir('.')) { echo "Directory handle: $handle<br>"; echo "Files:<br>"; while (false !== ($file = readdir($handle))) { echo $file."<br>"; } closedir($handle);}$time_end = microtime();$time = $time_end - $time_start;print "Temps en secondes: <b>".$time."</b><br>";?> Vérification faite précisément, je suis entre 0,000263 et 0,000282 seconde pour une centaine de fichiers. Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 13 Avril 2006 Partager Posté 13 Avril 2006 (modifié) Dans le script final, bien sûr, tu n'oublieras pas de ne pas lister les entrées './' et '../'. Edit : Dan, il y a une raison précise pour laquelle tu utilises print ou echo ? Modifié 13 Avril 2006 par captain_torche Lien vers le commentaire Partager sur d’autres sites More sharing options...
v4np13 Posté 13 Avril 2006 Auteur Partager Posté 13 Avril 2006 Arf j'en demandais pas tant Dan, je te croyais sur parole Mais merci pour la petite démonstration Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 13 Avril 2006 Partager Posté 13 Avril 2006 Edit : Dan, il y a une raison précise pour laquelle tu utilises print ou echo ? Non, pas de raison particulière. Je viens de tester, les deux se valent au niveau temps d'exécution. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Unvolutus Posté 22 Juillet 2013 Partager Posté 22 Juillet 2013 Le sujet est vieux mais ça peux toujours servir : un petit @file_get_contents("le_fichier_a_tester") et vous avez un beau bool pour vous dire si vous avez réussi à accéder au fichier ou non if( !@file_get_contents("le_fichier_a_tester") ){ echo '404'; }else{ echo 'cool'; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant