<?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');

?>