Galerie php sans bdd, avec création de vignettes

Soyez le premier à donner votre avis sur cette source.

Snippet vu 62 104 fois - Téléchargée 2 453 fois

Contenu du snippet

Ceci est une galerie en php, qui ne nécessite pas de base de donnée. On peut choisir le nombre d'images à afficher par pages, et celles-ci sont redimensionnées.

Source / Exemple :


<div align='center' style='width:550px; margin-left:auto; margin-right:auto;'>
<?php

if (function_exists('ini_set'))
	ini_set("memory_limit",'64M'); // la création de vignettes peut-être lourde...

// VOUS POUVEZ MODIFIER CETTE PARTIE SELON VOS PRÉFÉRENCES:
$folder = 'img';   // Dossier contenant les images
$mini = 'mini';    // Dossier contenant les miniatures
$nbimg = 20;      // Nombre d'images par page
$hautmini = 75;  // Hauteur des miniatures
$largmini = 100; // Largeur des miniatures
$larg = 600; // Largeur de l'image
	
	
if (!isset($_GET['galerie']) AND !isset($_GET['img'])) // Si on ne cherche pas à afficher une galerie ni une image particulière...
{

	$i = 0;
	echo '<h3>Galeries</h3><table><tr>';

	$files = scandir($folder);
	
	if ($files)
	{
		@$max = count($files);
		$i = 0;
		$j = 0;
		while($i < $max)
		{
			if ($files[$i] != '.' AND $files[$i] != '..' AND $files[$i] != 'Thumbs.db' AND $files[$i] != 'perso')// par exemple, on  affichera pas le contenu du dossier "perso"
			{
				$thumb = array();
				$thumb = scandir($folder . '/' . $files[$i]);
				
				echo '<td align="center">';
				echo '<a href="galerie.php?galerie=' . $folder . '/' . $files[$i] . '" target="_self">';
				echo '<img src="' . $folder . '/' . $files[$i] . '/' . $mini . '/' . $thumb[2] . '" width="130" height="100" border="0" alt="' . $thumb[2] . '" />';
				echo '</a><br /><a href="galerie.php?galerie=' . $files[$i] . '/' . $files[$i] . '" target="_self">' . $files[$i] . '</a>';
				echo '</td>';
			
				$j++; // Pour afficher 4 images par lignes.
				if (($j/4) == 1)
				{
					echo '</tr><tr>';
					$j = 0;
				}
			}
			$i++; 
		}
	}
	
	echo '</tr></table><br /><br />';
}
elseif (!isset($_GET['img'])) // Si on veut afficher une galerie...
{

	$galerie = str_replace($folder . '/', '', $_GET['galerie']); // On extrait le nom de la galerie

	echo '<h3>Galerie - ' . $galerie . '</h3>Cliquez sur une image pour la voir en plus grand.<br />';

	if (isset($_GET['id']))   // id = page affichée
		$id = $_GET['id'];
	else
		$id = 1;

	$glop = $id * $nbimg; // Pour la pagination...
	$glup = ($id-1) * $nbimg;
	$row = 0;

	$files = scandir($folder . '/' . $galerie); // On "scanne" la galerie...
	
	if ($files)
	{
		@$max = count($files); // On compte le nombre de fichiers présents dans le dossier, pour la boucle qui suit.
		$i = 0;
		while($i < $max)
		{
			if ($files[$i] != '.' AND $files[$i] != '..' AND $files[$i] != 'Thumbs.db' AND $files[$i] != 'mini' AND $files[$i] != 'perso')// par exemple, on  affichera pas le contenu du dossier "perso"
			{
			$row = $row+1;
			if ($row<=$glop && $row>$glup)     // affiche que les images comprises entre [(id -1) * nb images] et [id*nb images]
			{
					if (!file_exists($folder . '/' . $galerie . '/' . $mini . '/' . $files[$i]))   // vérifie si une miniature est déjà présente, auquel cas, pas besoin d'en recréer
					{
						if (!file_exists($folder . '/' . $galerie . '/' . $mini)) // Si le dossier des miniatures n'existe pas, on le crée.
							@mkdir ($folder . '/' . $galerie . '/' . $mini, 0755);
						
						$Image = $folder . '/' . $galerie . '/' . $files[$i];
						$ratio = 100;
						// création de la miniature
						$src = imagecreatefromjpeg($Image);
						$size = getimagesize($Image);

						if ($size[0] > $size[1])
						{
							$im = imagecreatetruecolor(round(($ratio/$size[1])*$size[0]), $ratio);
							imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$size[1])*$size[0]),$ratio, $size[0], $size[1]);
						}
						else
						{
							$im = imagecreatetruecolor($ratio, round(($ratio/$size[0])*$size[1]));
							imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($size[1]*($ratio/$size[0])), $size[0], $size[1]);
						}
						
						$miniature = $folder . '/' . $galerie . '/' . $mini . '/' . $files[$i];

						imagejpeg($im, $miniature);
						chmod($miniature,0755); // CHMOD des vignettes crées
						
					}
				
				$nom = substr($files[$i], 0, strlen($Fichier) - 4); // On extrait le nom de l'image de son nom complet
				echo '<a href="galerie.php?img=' . $folder . '/' . $galerie . '/' . $files[$i] . '" target="_self">';
				echo '<img src="' . $folder . '/' . $galerie . '/' . $mini . '/' . $files[$i] . '" border="0" width="' . $largmini . '" height=' . $hautmini . '" alt="' . $nom. '" onmouseover="document.getElementById(\'titreimg\').style.visibility=\'visible\'; document.getElementById(\'titreimg\').innerHTML = \'' . $nom . '\';" onmouseout="document.getElementById(\'titreimg\').innerHTML = \'<br />\';" /></a>';

			}
			}
			$i++; 
		}
	}
	
	echo '<br /><div id="titreimg"><br /></div>';

	if ($row == 1)
		echo 'Il y a ' . $row . ' image enregistrée';

	if ($row == 0)
		echo 'Il n\'y a aucune image enregistrée';

	if($row != 1 AND $row != 0)
		echo 'Il y a '.$row.' images enregistrées';

	echo '<br /><br />';

	if ($id > 1) // Affichage des N* de page
		echo '<a href="galerie.php?id=' . ($id - 1) . '&amp;galerie=' . $galerie . '">[précédent]</a>&nbsp;-&nbsp;';
	else
		echo '[précédent] - ';

	for ($i=1; $i <= ceil($row/$nbimg); $i++)
	{
		if ($i != $id)
			echo '<a href="galerie.php?id=' . $i . '&amp;galerie=' . $galerie . '">' . $i . '</a>&nbsp;';
		else
			echo '[' . $i . '] ';
	}

	if ($id*$nbimg < $row)
		echo '- <a href="galerie.php?id=' . ($id + 1) . '&amp;galerie=' . $galerie . '">[suivant]</a>';
	else
		echo '- [suivant]';

	echo '<br /><br /><a href="galerie.php">Retour aux galeries</a><br /></div>';
}
else
{
	echo '<br />';
	$img = $_GET['img'];

	$nom = strstr($img, '/');
	$nom = strstr(substr($nom, 1, strlen($nom)), '/'); // Obtenir le nom de l'image: c'est bof, mais j'ai pas trouvé plus simple ;)
	$nom = substr($nom, 1, strlen($nom) - 5);

	echo '<a href="' . $img . '" target="_blank" border="0"><img src="' . $img . '" alt="' . $nom . '" width="' . $larg . '" border="0" alt="' . $nom . '"></a>';
	echo $nom . '<br /><br />Les images sont redimensionnées. Pour les voir avec leur taille réelle, cliquez dessus.';
	echo '<br /><br /><a href="javascript:history.back()"><b>Retour</b></a>';
}
?>
</div>

Conclusion :


Pour ce qui est de la mise en page, je vous laisse vous en charger ;)

Si vous voulez afficher la galerie en l'appelant via une adresse de ce type: http://site.com/index.php?page=galerie, il faut alors remplacer "galerie.php?id=..." par "index.php?page=galerie&id=...".
(id est la page)

Merci de choisir cette source !

A voir également

Ajouter un commentaire

Commentaires

Messages postés
7
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
26 février 2013

Salut j'ai un probleme avec, tout marche a merveille sur mon wampserver. Une fois je l'ai mis en ligne, ca n'affiche pas les fotos. Et de plus, j'ai créé un fichier uplaod pour mettre le photo en ligne et ca me donne des problemes, la page d'upload peut prendre 1-2 minutes pour upload 1 seul image. Est-ce que quelqu'un peut m'aider a resoudre ce probleme. Je l'ai herberger sur le www.computermaximum.com
Messages postés
7
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
26 février 2013

Tu devrais augmenter le size (ligne 5) non pas a 64M Mais à 100M pour qu’il puisse supporter les images JPG et autres qui pourra être très lourd lors de la création des miniatures. Dans la ligne 116 tu devrais mettre $files[$i] a la place de $Fichier sinon cella n’affichera pas les photos qui sont classer par galerie.
Ce partiel de code devrait :
echo '';
Devrais ecrire de la manière suivante :
echo '';
Apres le code est parfait pour une bonne utilisation…. Merci pour le code mon ami.
Messages postés
6
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
29 juin 2010

Ah et petite précision.
J'ai du rajouter un parametre pour le GET (ligne 38 et 40) :

Car ma galerie qui s'appelle noce est dans ma page galerie est que les différentes pages des galeries s'ouvrent dynamiquement.
Du coup je ne sais pas si c'est pas ça qui pose soucis
Messages postés
6
Date d'inscription
lundi 14 avril 2008
Statut
Membre
Dernière intervention
29 juin 2010

Salut, sympa cette petite galerie, mais impossible de faire marcher le code, j'obtiens :

Warning: scandir(galerie/noce/1) [function.scandir]: failed to open dir: No such file or directory in C:\wamp\www\etma\include\noce2.php on line 76

Warning: scandir() [function.scandir]: (errno 2): No such file or directory in C:\wamp\www\etma\include\noce2.php on line 76

La ligne 76 c'est : $files = scandir($folder . '/' . $galerie); // On "scanne" la galerie...

C'est bizarre mais quand je regarde l'adresse que ça me genere ça donne : galerie/noce/1 alors que mes photos sont dans galerie/noce
et que j'ai specifié comme $folder : galerie/noce
et comme $mini: galerie/noce/thumbs

y'a un soucis quelque part, il ne me trouve pas les images.
Un ptit coup de main svp ?
Messages postés
1
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
11 janvier 2010

Bonjour ThePilot,

Merci pour ton code source...c'est super et facile a comprendre...=)

Sinon j'ai également le probleme du scandir...Il me dit:

Warning: scandir(img/galerie_photo/charmey.jpg) [function.scandir]: failed to open dir:

Et ceci pour toutes les images de mon dossier spécifié...
J'ai contrôler le nom des dossier et ils sont corrects...

Peux-tu m'aider stp...Merci
Afficher les 36 commentaires

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.