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