isfile() est-il gourmand ?

Eléphanteau du PHP | 23 Messages

15 janv. 2008, 14:41

Bonjour,
Pour afficher une serie d'image dans un ordre precis je vois 2 solutions :

1- Je stock les noms des images dans un tableau ou un fichier txt. classique

2- Ou bien je m'arrange pour isoler ces images, que j'aurai correctement renomé (ex:diapo_1.jpg, diapo_2.jpg, diapo_3.jpg, ...), dans un dossier et ensuite je fais quelquechose comme :

Code : Tout sélectionner

$i=1; $path("mondossier/"); while(isfile($path."diapo_".$i.".jpg") { echo "<img src=".$path."diapo_".$i.".jpg"." />"; $i++; }
(j'ai pas testé mon code, y'a peut être une erreure mais c'est surtout pour illustrer)
Je me demandais si la seconde solution etait pas trop gourmande pour le serveur ... ou s'il ne l'etait pas forcement plus qu'une requete SQL.

Merci beaucoup pour votre avis.

Léon

Mammouth du PHP | 1339 Messages

15 janv. 2008, 14:45

Utilise la fonction file_exists() :

http://www.manuelphp.com/php/function.file-exists.php
Bon sinon tu me fais un message privé et on se fait un TeamViewer

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

15 janv. 2008, 15:13

Ta seconde solution a surtout l'inconvénient que si un jour tu supprimes le fichier n°2, tu es obligé de renommer tous les autres fichiers pour ne pas que ton while s'arrête au premier fichier inexistant alors que d'autres suivent...

Plutôt que de partir là dessus et tester à chaque fois si le fichier existe, pourquoi ne pas parcourir le dossier (opendir()) et afficher toutes les images que tu y trouves ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 23 Messages

15 janv. 2008, 15:25

Utilise la fonction file_exists()
Ah oui effectivement elle correspond mieux a ce que je veux faire.

Ryle, parce qu'en réalité je veux générer un diaporama avec miniatures et images à taille normal. Donc en fait à chaque fois je testerai :

Code : Tout sélectionner

while (file_exists($path."diapo_".$i.".jpg") && file_exists($path."diapo_".$i."_small.jpg")) echo "...";
A prioris une fois défini les images ne changeront pas .. et j'imagine qu'un while (...) echo ...; demandera moins de ressources qu'un for (...) if (...) echo ... ;.

Encore une fois ce qui m'inquiete c'est de savoir si ce genre de teste doit rester ponctuel où si je peux me permettre de le relancer à chaque affichage de ma page.

Merci

Eléphanteau du PHP | 23 Messages

15 janv. 2008, 17:50

Encore une fois ce qui m'inquiete c'est de savoir si ce genre de teste doit rester ponctuel où si je peux me permettre de le relancer à chaque affichage de ma page.
Personne n'a déjà essayé ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

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

15 janv. 2008, 18:12

Il me semble que le while() est effectivement plus rapide que le for(), mais ça ne commencera à se sentir en dixièmes de secondes qu'à partir de plusieurs millions d'itérations :)

maintenant comme je le disais, si la moindre photo ou vignette manque, ta boucle s'arrête et tu perds toute la fin de ta galerie... Du coup le test pour savoir si le fichier existe n'est pas forcément interessant... personnellement je préférerait une croix rouge au milieu de ma galerie qui m'indique qu'un fichier est absent plutôt qu'une galerie qui s'arrête au 3 ème fichier alors que j'en ai 50 autres qui attendent derrière ;)

L'avantage d'une boucle while sur les éléments d'un dossier, c'est que même en cas d'absence d'un fichier, celle-ci ne s'arrêtera qu'après les avoir tous essayé.. et ca ne t'empêche pas de tester uniquement les miniatures et de vérifier que l'image en taille réelle existe bien :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 23 Messages

15 janv. 2008, 18:59

Effectivement si le for est pas beaucoup plus lent que le while alors j'irai peut être pour le for.

Moi ce qui m'inquietait c'etait plutot qu'un script 20 à 40 fois la fonction file_exists(); ... et ce 1000 fois par jour risque de ramer pas mal.

Merci pour vos conseils :)