<?php
// ------------------------------------------------------------------------- //
// Système de cache //
// ------------------------------------------------------------------------- //
// Auteur: Matthias Etienne <matt@php-test.com> //
// Web: http://www.php-test.com //
// ------------------------------------------------------------------------- //
/*
Voici un exemple de mis en cache de pages web (contenant par exemple des
requêtes sql) que j'ai élaboré afin de réduire le temps d'accès à certaines
pages de mon site. Le principe est de vérifier l'état du cache (sa durée de
vie) : si celui-ci a expiré, on recrée le cache et on l'affiche. Sinon, on
affiche directement le cache.
L'idée m'est venu en étudiant le système de parsing des news de phpinfo.net.
*/
?>
<?
//fichier fonctions.php
/*******************************************
Fonction de verification de l'etat du cache
********************************************/
// duree cache en secondes !
function Verif_cache($fichier_cache, $duree_cache){
if(is_file($fichier_cache) == true){
$modification_time = filemtime($fichier_cache);
$actuel_time = time();
if(($actuel_time - $modification_time)>$duree_cache){
return false;
}else{
return true;
}
}
}
/********************************************
Fonction de creation du cache
*********************************************/
function Creer_cache($fichier_cache,$contenu){
$fp=@fopen("$fichier_cache","w+");
if(!$fp) {return false;}
else{
fputs($fp,"$contenu\n");
fclose($fp);
return true;
}
}
?>
<?
//fichier exemple.php
include "fonctions.php"; //on inclut les fonctions
/* on vérifie l'ancienneté du cache grace à la fonction
Verif_cache. La durée est exprimée en secondes.
On met donc 604800 pour une semaine
*/
if(!Verif_cache("edito.cache.htm", 604800)){
// Cas où le cache est expiré (la fonction
// renvoie false)
// on fait donc la requete
mysql_connect("$serveur","$user","$password")
or die ("Impossible de se connecter a mysql !");
mysql_select_db($base) or die ("Impossible d' acceder à la base !!!");
$resultat = mysql_query("select * from edito order by date desc Limit 1");
$num = mysql_num_rows($resultat);
if ($num!=0)
{
while ($res=mysql_fetch_row($resultat))
{
$titre = mysql_result($resultat,$i,"titre");
$Date = mysql_result($resultat,$i,"date");
$texte = mysql_result($resultat,$i,"texte");
//On crée une variable $cache dans laquelle
// on met le contenu du futur cache
$cache.="$titre le $Date";
$cache.="<br>$texte";
}
}
// ON CREE LE CACHE
if(!Creer_cache("edito.cache.htm","$cache")){
// cas où erreur
echo "Impossible de créer le cache.";
mysql_close();
}else{
// le cache a été recréé: on l'inclu ds la pge
include "edito.cache.htm";
mysql_close();
}
}else{
// si le cache n'a pas expiré on l'inclu.
include "edito.cache.htm";
}
?>