Il y a plusieurs type de caches. D'abord les utiles et les inutiles ... (ok je sort :p)
Plus sérieusement, il y a des caches sur des fichiers générés dynamiquement et des caches sur, par exemple, des requêtes sql.
Quoi, c'est pas la même chose pour tout? ... Et ben non !
Et ce tutoriel donne quelques explications sur le comment du pourquoi.
Mais, je ne vais pas vous donner le code tout fait, juste l'idée :D
Tout d'abord, regardons comment fonctionne un système de cache sur des fichiers.
On peux choisir d'utiliser un cache pour :
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énération automatique du cache, ou un cas spécial pour les thumbernails, on engregistre le md5 du fichier source.
<?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éré. 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 systèmes. Mais avec le md5 c'est, si le fichier initial est modifié, alors le fichier dépendant doit être mis a jour.
Avec le système de temps, c'est mis à jour tout les X secondes.
Tout ceci est fort basique, mais il est possible d'élaborer pour créer un cache de requêtes sql (avec le système de temps). On enregistre les résultats des requêtes en format php dans le fichier cache, et on inclut le fichier cache pour avoir le résultat des requêtes...
Mais il faut faire attention avec ceci, si une erreur s'insère (un enregistrement qui revient plusieurs fois alors qu'il n'existe qu'une fois, par exemple) alors tout risque de partir vinaigre et faire planter un thread du serveur (Si si, expérience personnelle :-D). Et je vous avoue que c'est assez frustrant...
J'espère que ce tuto va vous donner des idées, histoire que je n'ai pas fait ça pour rien ;)
Xro