<?php

// ------------------------------------------------------------------------- //
// Système de cache pour PHP4                                                //
// ------------------------------------------------------------------------- //
// Auteur: Florian PERRICHOT                                                 //
// Email:  perrich@club-internet.fr                                          //
// Web:    http://www.frshop.net                                             //
// ------------------------------------------------------------------------- //

// La librairie
// -----------------------------------------------------------------

// durée de mise en cache en secondes (900 = 15 minutes)
//define( 'CACHE_TIME', 900 );
define( 'CACHE_TIME', 2 );

// nom du répertoire de cache sans "/" à la fin
define( 'CACHE_REP', 'cache' );

// --------------------------------------------------------------------------
// Test si la durée de mise en cache a expiré

function is_cache_expired( $cache_file_name, $cache_delay = CACHE_TIME,
                           
$directory = CACHE_REP )
{
$file_name = $directory.'/'.$cache_file_name;

if (
file_exists( $file_name ) && filesize( $file_name ) )
{
if ( (
filemtime($file_name) + $cache_delay) > date('U') ) return false;
}
return
true;
}

                         
// --------------------------------------------------------------------------
// Insère le fichier caché

function draw_cached_file( $cache_file_name, $directory = CACHE_REP )
{
// Insertion du fichier caché
readfile( $directory.'/'.$cache_file_name );
}

// --------------------------------------------------------------------------
// Lance la mise en cache

function start_cache()
{
ob_start();
ignore_user_abort();
}

// --------------------------------------------------------------------------
// Met à jour le fichier caché

// Si $clear est à false (false par défaut) le contenu est aussi affiché.
// Il est possible de préciser le répertoire de cache.

function update_cache( $cache_file_name, $clear = False, $directory = CACHE_REP )
{
// sauvegarde du contenu
if ( $fp = @fopen( $directory.'/'.$cache_file_name, 'w' ) )
{
fputs( $fp, ob_get_contents() );
fclose( $fp );
}

if (
$clear ) ob_end_clean(); else ob_end_flush();
}
?>


Voila un exemple :
-----------------------------------------------------------------
<?
// --------------------------------------------------------------------------
// Chargement de la page en utilisant le systeme de cache

$id = 1;
$name = 'fichier'.$id.'_'.$current.'.cache';

if ( !
is_cache_expired( $name ) ) draw_cached_file( $name );
else
{
start_cache();
include
'affiche.php';
update_cache( $name );
}

// --------------------------------------------------------------------------
?>


et le fichier affiche.php
-----------------------------------------------------------------
<?
  
echo 'cette partie est placée en cache et utilise des variables ex :'.$i;
?>