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
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.