8797 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Un oeil avisé pourrait-il observer mon code et me dire s'il y a possibilité de l'optimiser un tantinet dans sa longueur... ? Smiley smile

Je souhaite réaliser l'affichage du contenu d'un répertoire contenant des images uniquement.
Cet affichage est réalisé grâce à un tableau dont le nombre de colonnes par ligne est paramétrable.
Pour cela, j'ai créé une fonction affiche() en voici sa définition...


function affiche() {

$rep = "images_upload/"; // répertoire contenant les images à afficher
$dir = opendir($rep); // 

$new_width = 120; // taille de la miniature
$new_height = 120; // taille de la miniature

$nb_images_par_ligne = 3; // nombre d'images à afficher
$nb_images = 0; // nombre d'images contenues dans le répertoire
$compteur_images = 0; // nombre d'images qui sont affichées


while ($f = readdir($dir)) {
	
	if (substr($f,-3) == "gif" || substr($f,-3) == "jpg") {
		$nb_images++;
		$id_images[] = $f; // nom du fichier image
	}
	
}


// Calcul du nombre de lignes de tableau nécessaire

 if ($nb_images/$nb_images_par_ligne > intval($nb_images/$nb_images_par_ligne)) { 
 	$nb_lignes = ceil($nb_images/$nb_images_par_ligne); 
}
else {
	$nb_lignes = $nb_images/$nb_images_par_ligne; 
}
	

echo "<table>";


for ($i=0;$i<$nb_lignes;$i++) {

   echo "<tr>";
   
   for ($j=0;$j<$nb_images_par_ligne;$j++) {
		
		if ($compteur_images < $nb_images) {echo "<td><a href=# onclick=\"window.open('voir_image.php?id=".$id_images[$compteur_images]."')\" ><img src=\"".$rep.$id_images[$compteur_images]."\" width='".$new_width."' height='".$new_height."' /></a></td>";
		
		 $compteur_images++; }
	}
	
	echo "</tr>";

}

echo "</table>";

}



Ce qui donne l'affichage désiré...

Je vous remercie d'avance pour m'aider à optimiser mon code (si c'est possible bien sur...) ! Smiley lol


A déplacer dans "Standards web et langages serveurs"... Désolé erreur bête Smiley lol
Modifié par Api1000 (05 Dec 2007 - 18:53)
Administrateur
Bonjour,

j'ai pas regardé globalement mais sur quelques détails, tu peux:
- remplacer le test du while par quelque chose comme:

$extension = substr($f,-3);
if(in_array($extension, array('jpe','jpg','gif','bmp','png'))) {

et mieux ne pas te fier à la longueur de l'extension (.jpeg par exemple ou dans une autre application que la tienne, il y aurait .html).
En découpant la chaîne grâce à explode() et en cherchant le dernier élément du tableau que ça retourne (avec end())
Ou en piochant directement dans le tableau que retourne pathinfo() parce qu'en fait il y a une fonction toute prête Smiley ravi
EDIT: Si j'ai un fichier sans extension qui s'appelle "mon_super_gif", ton script va croire que c'est une image.

- découper ton très long echo en plusieurs echo successifs sur plusieurs lignes. Le résultat est le même en affichant le source dans le navigateur (à moins que tu ne rajoutes des "\n" pour la lisibilité du code) mais c'est plus lisible pour toi pendant que tu développes le script
Modifié par Felipe (05 Dec 2007 - 21:45)
Bonsoir,


Je vais pas faire ton code à ta place mais voici quelques pistes (certaines en excluent d'autre, à toi de choisir):

-HTML: utiliser un vrai système de miniature, les attribut height et width réduise la taille apparente mais pas réelle (chargement entier de l'image).

-ceil() sur un entier retourne cet entier, pas celui supérieur: ceil(3.0) = 3.

-le modulo (%) effectue une division avec reste, par exemple 19%3 = 1 (3*6+1).

-Les structures suivantes devraient t'économiser des variables et simplifier le code si bien utilisées: foreach(), count().

-obtenir l'extension peut être plus générique: substr($str, strrpos('.', $str)). A utiliser par exemple avec in_array().

-un petit is_file() pourra éviter de prendre un dossier nommé "toto.gif".

-readdir() peut retourner une valeur équivalente à false (répertoire nommé 0 par exemple), l'utilisation correct est: while (($f = readdir($dir)) !== false) qui va vérifier le type.
Modifié par Necromantik (05 Dec 2007 - 22:01)
Merci pour vos réponses !

a écrit :
-HTML: utiliser un vrai système de miniature, les attribut height et width réduise la taille apparente mais pas réelle (chargement entier de l'image).


En effet, j'ai songé à l'utilisation de la librairie gd de PHP très pratique pour ce genre de chose. A la base, c'est ce que j'avais prévu de faire si cette gallerie était pour mon site perso mais compte tenu de mon cahier des charges... Ce n'est pas nécessaire.


a écrit :
-un petit is_file() pourra éviter de prendre un dossier nommé "toto.gif".


Oups, petit oubli Smiley cligne Merci de m'y faire penser !


a écrit :
-readdir() peut retourner une valeur équivalente à false (répertoire nommé 0 par exemple), l'utilisation correct est: while (($f = readdir($dir)) !== false) qui va vérifier le type.


En effet, cette utilisation est bien plus correcte : corrigé !


a écrit :
- remplacer le test du while par quelque chose comme:

$extension = substr($f,-3);

if(in_array($extension, array('jpe','jpg','gif','bmp','png'))) {


Bien plus pratique en effet Smiley cligne


a écrit :
En découpant la chaîne grâce à explode() et en cherchant le dernier élément du tableau que ça retourne (avec end())


Bien vu... J'ai utilisé la méthode que je vous ai exposé parce que le répertoire d'upload d'images n'est censé contenir que des images (différents tests sont faits sur une autre page PHP.


a écrit :
- découper ton très long echo en plusieurs echo successifs sur plusieurs lignes. Le résultat est le même en affichant le source dans le navigateur (à moins que tu ne rajoutes des "\n" pour la lisibilité du code) mais c'est plus lisible pour toi pendant que tu développes le script


Exact c'est ce que je fais toujours... Mais j'ai pas pris le temps de "lisibiliser" (heu... ouais lisibiliser) mon code Smiley lol
Bonjour, Bonsoir,

Voilà je suis un peu "Pas douée" pour arrivé à faire référencer mon site! Je me dis tout à fait logiquement que c'est à cause du code html qui mauvais! Je ne m'en sors plus mais vraiment plus! Est ce que quelqu'un d'entrre vous pourrais regarder le code de l'index que je vous ai coller ci-dessous?
Ce serait vraiment sympa si quelqu'un pouvait m'aider...

Voici LE code Smiley confused

Modérateur :
Hello et bienvenue ici Smiley smile

Trois choses importantes :
1- merci de ne pas poster un sujet au sein d'un autre sujet différent, sinon plus personne ne va s'en sortir. Pour faciliter la visibilité de ton problème, il est préférable de créer ton propre sujet.
2- merci de bien vouloir relire les règles à propos de l'affichage des codes sur ce forum. Ici, ton code mal affiché fait déformer toute la page.
3- merci de ne pas poster plusieurs fois le même message. C'est très désagréable.

Modifié par Raphael (07 Dec 2007 - 08:29)