Tout d'abord, regardons comment fonctionne un systeme de cache sur des fichiers.
On peux choisir d'utiliser un cache pour :
- Des fichiers créé dynamiquements mais qui ne change pas souvents.
- Des thumbernails créé a partire de php
- Image dynamique
Pour ces fichiers, on va ce baser sur la date de dernière modification.Le principe est de donner une date limite pour une régérérationautomatique du cache, ou un cas spécial pour les thumbernails, onengregistre le md5 du fichier source.
Code :
<?php// Pour un fichier normal define('CACHE_TIME',900); // en secondes
if(($time = filemtime($cached_file)) && ((time() - $time) < CACHE_TIME))
{
readfile($cached_file); // Si le temps limite est pas dépassé, alors on lis le ficher }
else
{
update_cache($cached_file.'.ext'); // Fonction qui va écrire dans le fichier cache. }
?>
---
<?php
// Pour un thumbernail
$cached_md5_file = substr($md5_file,0,strpos('.ext')); // Format: [chaine_md5].ext où ext est une extention quelqu'onque if( $md5 = md5(filemtime($cache_file)) != $cached_md5_file)
{
update_cache($md5.'.ext'); // Fonction qui va écrire dans le fichier cache. }?>
Ce code est donc fait pour prendre ce qui a été générer. Mais vous allez dire : "D'accord, mais comment on met le cache a jour?"
Tout simple, il suffit de relancer le processus de création initial ;-)
Il est bien évidemment possible de merger les deux systeme. Mais avecle md5 c'est, si le fichier initial est modifier, alors le fichierdépendant doit être mis a jour.
Avec le systeme de temps, c'est mettre a jour tout les X secondes.
Tout ceci est fort basique, mais il est possible d'élaborer pour crééun cache de requetes sql (avec le systeme de temps). On enregistre lesrésultats des requetes en format php dans le fichier cache, et oninclus le fichier cache pour avoir le résultat des requetes...
Mais il faut faire attention avec ceci, si une erreur s'insère (unenregistrement qui revient plusieurs fois alors qu'il n'existe qu'unefois, par exemple) alors tout risque de partire vinaigre et faireplanter un thread du serveur (Si si, expérience personnel :-D). Et jevous avoue que c'est asser frustrant...
J'espère que ce tuto va vous donner des idées, histoire que je n'aie pas fait ca pour rien ;)
Xro