Il arrive souvent que certaines données affichées changent rarement, et sollicitent donc inutilement PHP et vos bases de données.
Ce système de mise en cache permet de ne faire cette opération que de temps en temps, il peut donc y avoir beaucoup de connexions, l’affichage proviendra directement d’un fichier généré et placé dans un répertoire particulier. Un exemple est fourni pour tester ce script.
<?php
// ------------------------------------------------------------------------- //
// Gestion d'un système de cache avec PHP4 + exemple d'utilisation. //
// ------------------------------------------------------------------------- //
// Auteur: Frédéric Bouchery //
// Email: frederic@bouchery.com //
// Web: http://www.bouchery.com/ //
// ------------------------------------------------------------------------- //
?>
<?php
// ------------------------------------------------------------------------- //
// cache.inc.php //
// ------------------------------------------------------------------------- //
// Script développé par F. Bouchery [frederic@bouchery.com] //
// Ce script est entièrement libre de droits, mais je vous demanderai de //
// laisser ce commentaire. Si vous voulez apporter des modifs intéressantes, //
// mailer moi le résultat. Merci. //
///////////////////////////////////////////////////////////////////////////////
// durée de mise en cache en secondes (900 = 15 minutes)
define('CACHE_TIME',900);
// nom du répertoire de cache sans "/" à la fin
// Ce répertoire
define('CACHE_REP','cache');
// Insère le fichier caché, si il est trop vieux, il met à jour le fichier
// et insère le nouveau. Il est possible de préciser la durée de cache
// ainsi que le répertoire.
function cache($file_name, $duration = CACHE_TIME, $directory = CACHE_REP)
{
$cache_file = $directory.'/'.$file_name;
if(($time = filemtime($cache_file)) && ((time() - $time) < $duration))
// Insertion du fichier caché
readfile($cache_file);
else
// Mise à jour et insertion du fichier caché
update_cache($file_name, false, $directory);
}
// Met à jour le fichier caché et l'insère si "$clear" est à false (false par
// défaut). Il est possible de préciser le répertoire de cache.
function update_cache($file_name, $clear = False, $directory = CACHE_REP)
{
ob_start();
include($file_name);
// sauvegarde du contenu
if ($fp = @fopen($directory.'/'.$file_name,'w'))
{
fputs($fp, ob_get_contents());
fclose($fp);
}
if ($clear)
ob_end_clean();
else
ob_end_flush();
}
?>
<?php
// ------------------------------------------------------------------------- //
// date.php //
// ------------------------------------------------------------------------- //
// fichier à mettre en cache
echo 'la date est : '.date('d/m/Y H:i:s');
?>
<?php
// ------------------------------------------------------------------------- //
// exemple.php //
// ------------------------------------------------------------------------- //
// --------------------------------------------------------------------------
// le script date donne la date et l'heure du jour, cette solicitation de
// l'analyseur PHP sera faite toutes les 15 minutes, ce qui veut dire que
// l'heure restera la même pendant 15 minutes.
// vous pouvez faire un test en fixant le temps de mise en cache (CACHE_TIME)
// Ã 5, et vous allez vite comprendre le fonctionnement :-)
// Il est bien évidement idiot de faire ce genre de chose pour l'heure, mais
// lorsque les données proviennent d'une base, cela peut devenir rapidement
// intéressant !
// --------------------------------------------------------------------------
require 'cache.inc.php';
cache('date.php');
?>