Suite à mon article sur les différents niveaux de cache possibles pour une application web, voici quelques lignes qui permettent de mettre en place rapidement le niveau "bloc".
Ce code est à prendre un comme un "proof of concept" mais est tout à fait utilisable tel quel.
Bien entendu l'idéal aurait été de faire des fonctions/une classe mais j'ai volontairement fait le choix de la simplicité.
Ce script utilise un fichier pour cacher, mais une fois que vous avez compris le principe c'est assez simple de stocker dans des caches plus performants (memcache, shared memory, apc sont des exemples), le principe reste le même.
A lire aussi : Un exemple de cache objet en php
<?php
/* On démarre le tampon de sortie avec compression gz */
ob_start('ob_gzhandler');
/**
* On envoie un header pour que le contenu soit
* affiché en texte brute dans le navigateur
*/
header('Content-Type: text/plain');
/**
* Chemin vers le fichier de cache
* Il doit être accessible en écriture
* pour le serveur http
*/
$cacheFile = sys_get_temp_dir().'/cache.txt';
$time = time();
/* Si le fichier de cache est valide on l'utilise */
if (@filemtime($cacheFile) > $time)
{
readfile($cacheFile);
}
else
{
/* On démarre un nouveau tampon pour récupérer le contenu à cacher */
ob_start();
/* Un exemple de contenu qu'on souhaite cacher */
echo 'Cache content created at '.date('Y-m-d H:i:s', $time)."\n";
/* On récupère le contenu à cacher via le tampon */
$cacheContent = ob_get_contents();
/* On enregistre le contenu du tampon dans le fichier de cache */
file_put_contents($cacheFile, $cacheContent);
/* On valide le cache pour 30 secondes */
touch($cacheFile, $time + 30);
}
/* On affiche un contenu qui n'est pas caché */
echo "Current time ".date('Y-m-d H:i:s', $time);
?>
Image : Elton Harding