Galerie d'images: afficher une image contenu dans un zip sur votre site
J'ai précédemment expliqué comment Afficher aléatoirement une citation sur votre site et cela marche également parfaitement avec des images.
Je propose un autre petit script, assez similaire mais qui servira à afficher des images à partir d'une archive .zip.
J'ai effectué plusieurs modifications pour aller un peu plus loin et être capable d'afficher un plus grand nombre d'images ( >1000 fichiers). L'objectif principal restait toujours de se simplifier la tâche:
- plus besoin de lister les images que l'on souhaite afficher (comme dans le fichier random.txt).
- on ne gère qu'un seul fichier contenant l'ensemble des images (plus simple à transférer sur le serveur et sans le polluer avec un nombre important de fichiers)
- pas de doublon entre les images à afficher et l'archive qui peut être téléchargé
Il suffit de recopier le code PHP ci-dessous en modifiant le nom de l'archive et l'URL de la galerie.
<?php
$file="tux.zip"; // A MODIFIER >> URL du fichier zip
$urlPage="galerie.php"; // A MODIFIER >> URL de la page
// navigation
$start= 0 ; // index de départ
$end= getNbImages($file)-1 ; // index de fin
$urlVar=preg_replace('/(^.*?)\\?/', '', $urlPage."?id") ; // variable à récupérer
$urlGet=$urlPage."?id"; // URL pour la navigation
$id = isset($_GET[$urlVar])?intval($_GET[$urlVar]):intval(mt_rand($start, $end)); // on récupère l'ID
// Afficher l'image X
$image=getImageX($file, $id);
echo '<div style="text-align:center; " >'.$image.'</div>'; // A MODIFIER >> Mise en page de l'image
// Fonction pour retourner l'image correspondant à l'ID
function getImageX ($zipFile, $id) {
$zip = new ZipArchive;
$res = $zip->open($zipFile);
if ($res === TRUE) {
$src = $zip->getFromIndex($id);
$result = '<img src="http://blog.niqnutn.com/data:image/x-icon;base64,'.base64_encode($src).'" alt="Image" />';
return $result;
}
else {
echo 'échec, code:' . $res;
}
$zip->close();
}
// Fonction pour retourner le nombre d'images contenu dans l'archive
function getNbImages ($zipFile) {
$date_file=filemtime($zipFile);
$file_cache=$zipFile.'.cache';
$date_cache=filemtime($file_cache);
if ( (file_exists($file_cache)) && ($date_file <= $date_cache) ) {
$nb_items_cache = file_get_contents( $file_cache );
}
else {
$zip = new ZipArchive;
$res = $zip->open($zipFile);
if ($res === TRUE) {
$nb_items_cache=$zip->numFiles;
}
$zip->close();
file_put_contents($file_cache, $nb_items_cache);
}
return $nb_items_cache;
}
?>
<div id="pagination" style="text-align:center" ><span>
<?php
$previous=( $id > $start) ? " <a href=\\"".$urlGet."=". ($id-1) ."\\">Précédent</a> | " : "" ; echo $previous;
$rand=" <a href=\\"".$urlGet."=".(intval(mt_rand($start, $end)))."\\">Aléatoire</a> " ; echo $rand;
$next=( $id != $end ) ? " | <a href=\\"".$urlGet."=". ($id+1) ."\\">Suivant</a> " : "" ; echo $next;
?>
</span></div>
Les variables à modifier:
- $file: URL du fichier zip
- $urlPage: URL de la page
Puis de l'envoyer sur votre serveur avec l'archive contenant vos images.
En recopiant correctement le code correctement, vous devriez afficher une galerie avec des boutons de navigation.
Je n'ai pas de recul concernant les performances de ce script, donc à utiliser avec modération. Avec un fichier comportant plusieurs centaines d'images, cela ne semble pas poser de difficultés.
Ressources
2016 nIQnutn CC-BY