Galerie photo simple (1 fichier) sans mysql avec gestion des repertoires

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 007 fois - Téléchargée 26 fois

Contenu du snippet

Ce script est une galerie photo simple : Vous uploader vos photos dans un repertoire photos, dans des sous dossiers comme photo/convention. Le script affiche le listing des repertoires contenu dans le repertoire photos et genere les miniatures des photos pour un affichage rapide.
J'ai mélanger plusieurs sources de phpcs donc je remercie tous ceux qui se reconnaitrons dans ce code.
Pour visualiser le fonctionnement, aller voir sur http://www-etu.utt.fr/etu/jonglage/index.php?page=galerie.php

Merci de me laisser des commentaires pour améliorer ce code

Source / Exemple :


<?php
# //////////////////////////////////////////////////////////////////////////////////////////////////////////////
# /*galerie d'image par malokaff,
# Il s'agit d'un mix de plusieurs source de phpcs que j'ai essayer de simplifier pour faire un systeme de galerie
# simple : il suffit de metre les photos dans des sous dossiers du repertoire photo et le script se charge de
# la création des miniatures et de la mise en page.
#
#vous avez besoin d'un repertoire photo qui contient les dossiers des photos, 
#					un repertoire mini qui contiendra les miniatures généré par le script
# *////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*

//Fonction compression des images
  • /
function redimage($img_src,$img_dest,$dst_w,$dst_h,$alt,$title) { // Lit les dimensions de l'image $size = getimagesize($img_src); $src_w = $size[0]; $src_h = $size[1]; $ext = strtolower(substr($img_src, -3)); // $ext = strtolower(strstr($img_src, '.')); // Teste les dimensions tenant dans la zone $test_h = round(($dst_w / $src_w) * $src_h); $test_w = round(($dst_h / $src_h) * $src_w); // Si Height final non précisé (0) if(!$dst_h) $dst_h = $test_h; // Sinon si Width final non précisé (0) elseif(!$dst_w) $dst_w = $test_w; // Sinon teste quel redimensionnement tient dans la zone elseif($test_h>$dst_h) $dst_w = $test_w; else $dst_h = $test_h; // La vignette existe ? $test = (file_exists($img_dest)); // L'original a été modifiée ? if($test) { $test = (filemtime($img_dest)>filemtime($img_src)); } // Les dimensions de la vignette sont correctes ? if($test) { $size2 = getimagesize($img_dest); $test = ($size2[0]==$dst_w); $test = ($size2[1]==$dst_h); } // Créer la vignette ? if(!$test) { // Crée une image vierge aux bonnes dimensions $dst_im = imagecreatetruecolor($dst_w,$dst_h); // Copie dedans l'image initiale redimensionnée if ($ext == 'jpg' || $ext=='JPG') $src_im = imagecreatefromjpeg($img_src); else if ($ext == 'gif') $src_im = imagecreatefromgif($img_src); else if ($ext == 'png') $src_im = imagecreatefrompng($img_src); else{ die ('Une erreur est survenue dans le format de l\'image. Veuillez contacter un administrateur'); } imagecopyresized($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); imagecopyresampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h); // Sauve la nouvelle image if ($ext == 'jpg' || $ext=='JPG') imagejpeg($dst_im,$img_dest); else if ($ext == 'gif') imagegif($dst_im,$img_dest); else imagepng($dst_im,$img_dest); chmod("$img_dest",0777); // Détruis les tampons imagedestroy($dst_im); imagedestroy($src_im); } // Affiche le descritif de la vignette, décommentez si vous voulez que la fonction renvoit cela à la suite de son exécution //return 'width="'.$dst_w.'" height="'.$dst_h.'" alt="'.$alt.'" title="'.$title.'" />'; } //si pas d'action définie, j'affiche la page d'accueil de la galerie if (empty($_GET['action'])) {$action = "accueil";} else { $action=$_GET['action']; } //listing des repertoires pour les afficher dans un select present sur toutes les pages $directoryListing = "Les photos"; $noDir = "aucun répertoire"; //message d'erreur si aucun repertoire dans le dossier $dir="photo"; //repertoire où sont stockée les sous repertoires des photos $rep=opendir($dir); rewinddir($rep); ?> <center><form name="form1" method="post" action="index.php?page=galerie.php&action=affichephoto" class="texte"> <select name="dossier" onchange="this.form.submit();"> <option value=""></option> <? //$bAuMoinsUnRepertoire = false; while ($file = readdir($rep)){ if($file != '..' && $file !='.' && $file !='' && $file !='Thumbs.db'){ //if (is_dir($file)){ $bAuMoinsUnRepertoire = true; ?> <option value="<? echo "$file"; ?>" <? if(isset($_POST['dossier']) && $_POST['dossier']=="$file") { echo "selected=\"selected\""; } if(isset($_GET['dossier']) && $_GET['dossier']=="$file") { echo "selected=\"selected\""; } ?>><? echo "$file"; ?></option> <? //} } } echo "</select></form></center>"; if ($bAuMoinsUnRepertoire == false) { print("<tr><td nowrap class='texte'><div align='center'>- $noDir -</div></td>"); print("</td></tr>"); } //on ferme le repertoire et on libère la mémoire closedir($rep); clearstatcache(); //affichage de la page d'accueil de la galerie si pas d'action définie if($action=="accueil") { echo '<p class="texte">Decouvrez nos photos, n\'hesiter pas a laisser des commentaires sur le forum! <br> Pour fonctionner cette galerie a besoin d\'un repertoire photos contenant les sous dossiers des photos et d\'un repertoire mini qui contiendra les sous dossier des miniatures généré par le script </p>'; } /*
//affichage galerie
  • /
function isImg ($file){if (eregi(".jpg$",$file)){return true;}} // Fonction de verification des fichiers jpeg //si action=affiche photo on affiche la page des miniatures de la galerie selectionnée if($action=="affichephoto") { if(isset($_GET['dossier'])) { $dossier=$_GET['dossier']; } if(isset($_POST['dossier'])) { $dossier=$_POST['dossier']; } $repImg = "photo/$dossier"; // Repertoire des images $handle = opendir("$repImg"); // On ouvre le repertoire des images while ($file = readdir($handle)) { if ($file != "." && $file != ".." && isImg ($file)) { //on crée le dossier de miniatures avec @ pour éviter message d'erreur si il n'existe pas! @mkdir("mini/$dossier"); //chmod("mini/$dossier",0777); //on enregistre la miniatures dans le dossier mini, dans un sous repertoire portant le meme nom et avec le prefixe mini redimage("$repImg/$file","mini/$dossier/mini_$file",100,100,"test","test"); $listImg[] = $file; // On place toutes les images du dossier dans le tableau $imgList sort($listImg);}} // On classe les fichiers dans l'orde alphabetique (c'est plus mieux ;D) ) closedir($handle); // On ferme le repertoire des images // presentation de la page $lien = "index.php?page=galerie.php&action=affichephoto&dossier=$dossier&"; // Liens pour afficher votre page //on teste si un numero de la galerie a été envoyé par la barre d'adresse pour l'affichage sur plusieurs pages des miniatures if (empty($_GET['Galerie'])) {$Galerie = 1;} else { $Galerie=$_GET['Galerie']; } $precGalerie = $Galerie-1; // Galerie precedente $suivGalerie = $Galerie+1; // Galerie suivante $nbImg = count($listImg); // Compte le nombre d'image $nbLigne = 4; // Nombre de ligne souhaité $nbCol = 4; // Nombre de colonne souhaité $nbImgParPg = $nbLigne*$nbCol; // Calcul du nombre d'image par page en fonction des parametres précédents $nbGalerie = $nbImg/$nbImgParPg; // Calcul du nombre de galerie $nbGalerie = ceil("$nbGalerie"); // Calcul du nombre de galerie, arrondi superieur du calcul $numImg = ($Galerie*$nbImgParPg)-$nbImgParPg; // Compteur pour le tableau $imgList //affichage de tableau contenant les miniatures echo '<table border="0" cellspacing="5" cellpadding="3" width="95%" align="center" class="texte">'; $comptLigne = 0; // Mise a zero du compteur de lignes while ($comptLigne < $nbLigne) { echo '<tr>'; $comtpImg = 0; // Mise a zero du compteur d'images while ($comtpImg < $nbCol && $numImg < $nbImg) { echo '<td align=center><a target=blank href="'.$repImg.'/'.$listImg[$numImg].'"><img src="mini/'.$dossier.'/mini_'.$listImg[$numImg].'" border="0" width="50" height="50"></a></td>'; //changez la ligne ci-dessus pour la taille des miniatures $numImg++; // Incremantation du compteur de $imgList (each() et foreach() etait beaucoup moins pratique :D( ) $comtpImg++; // Incremantation du compteur d'images } echo '</tr>'; $comptLigne++; // Incremantation du compteur de lignes } //afichage de la barre de navigation echo '</table><table width="100%" border="0" class="texte"><tr><td colspan="$nbCol" align="center" width="100%">'; for ($compt = 1; $compt <= $nbGalerie && $nbGalerie > 1; $compt++) {echo '| <a href="'.$lien.'Galerie='.$compt.'">'.$compt.'</a> ';} if ($nbGalerie > 1) {echo' | ';} echo '</td></tr><tr><td width="50%" align="left">'; if ($Galerie > 1) {echo '<a href="'.$lien.'Galerie='.$precGalerie.'">Precedent</a> ';} // Lien "precedent" echo ' </td><td width="50%" align="right">'; if ($Galerie < $nbGalerie) {echo '<a href="'.$lien.'Galerie='.$suivGalerie.'">Suivant</a>';} // Lien "suivant" echo '</td></tr></table></td></tr></table>'; } ?>

Conclusion :


J'ai un bug lorsque les photos sont trop grande (>300ko), il balance une erreur fatale lors de la compression qui est lié je penses au serveur de mon ecole qui ne gere pas les grosses opérations.
Vous devez avoir un répertoire photo qui contient les dossiers des photos et un repertoire mini qui contiendra les miniatures générées.

une autre version de cette galerie est disponible : http://www.phpcs.com/code.aspx?ID=39981
Cette nouvelle version prends en charge les commentaires et affiche l'image et ses commentaires dans une popup ce qui est beaucoup plus propre

A voir également

Ajouter un commentaire

Commentaires

cs_twisteurwin
Messages postés
167
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
2 mai 2009
-
kimiwelle>autant pour moi jai fais une erreur ecris comme ca plutot

echo '<td align="center">['.$repImg.'/'.$listImg[$numImg].' ]</td>';
//changez la ligne ci-dessus pour la taille des miniatures

la ca devrait aller tiens moi au jus a+++
kimiwelle
Messages postés
7
Date d'inscription
vendredi 23 octobre 2009
Statut
Membre
Dernière intervention
4 février 2010
-
Bonsoir,

j'ai bien changé le code, mais ca s'ouvre pas en pop up.
et visiblement le "" entre Grande et height ne lui plait pas...

echo '<td align="center">['.$repImg.'/'.$listImg[$numImg].' ]</td>';
//changez la ligne ci-dessus pour la taille des miniatures

Je regarderai plus en détail demain...

merci encore pour ton aide.
j'ai pas mal avancé dans ma présentation, et il ne me reste plus que ce problème de pop up
cs_twisteurwin
Messages postés
167
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
2 mai 2009
-
malokaff> J'en doute pas on est arrivé la même année (à un mois près) ici et je pense avec le même niveau :p
Après c'est sur qu'il faudrait tout refaire mais bon ca à le mérite (et peut être le défaut) d'ouvrir les yeux sur le php et ses lacunes quant il évolue ^^

kimiwelle> tu n'a pas bien collé le script que tu voulais pour ouvrir les images en grandes dans une popup:
remplace :
(source html)
[photos/Enseignes/001.jpg ]

par :(recherche la ligne dans le code php et remplace la par celle la)

echo '<td align="center">['.$repImg.'/'.$listImg[$numImg].' ]</td>';
//changez la ligne ci-dessus pour la taille des miniatures

Il faudrait aussi que tu changes le doctype c'est pas du xhtml...

a+++
malokaff
Messages postés
25
Date d'inscription
jeudi 14 octobre 2004
Statut
Membre
Dernière intervention
11 février 2014
-
hello,

merci twisteurwin pour ton expertise!

moi même j'aurais du mal à me replonger dedans parceque c'est un vieux script que j'ai pondu en 2006!

merci en tout cas pour l'interet que vous portez sur ce script

avec du recul et plus d'expérience, il aurait fallu que j'integre une partie "constante" pour pouvoir changer facilement certains parametre comme le nom de la page utilisé (par défault index.php)

mais bon, j'étais jeune et insouciant...

Kimiwelle, j'ai bien recu ton MP, je te reponds au plus vite

A+
cs_twisteurwin
Messages postés
167
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
2 mai 2009
-
jt'en prie :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.