Système de cache rapide et simple

A quoi cela peut-il bien servir ?

Un système de cache peut devenir utile pour :

  • Un site particulièrement visité
  • Si la base de données de votre hébergeur est lente
  • Etc

Le système de cache que je vais vous proposer est d’une simplicité et efficacité déconcertante.

Comment ça marche ?

C’est très simple. Lors du premier chargement de la page, nous allons faire une copie du résultat et la stocker dans un fichier.
Lors d’un autre chargement de la même page on va vérifier si le fichier de cache est périmé ou non. S’il n’est pas périmé, on affiche ce fichier, donc pas de perte de temps pour le serveur à refaire sa moulinette pour charger la page, donc moins de ressources sont consommées. S’il est périmé on régénère le fichier.

Pour cela on va utiliser trois fonctions internes à php.

ob_start() : Cette fonction démarre la temporisation de sortie. Tant qu’elle est enclenchée, aucune donnée, hormis les en-têtes, n’est envoyée au navigateur, mais temporairement mise en tampon.

ob_get_contents() : Cette fonction retournera le contenu du tampon de sortie sans l’effacer ou FALSE, si la temporisation de sortie n’est pas activée.

ob_end_clean() : Cette fonction vide le contenu du premier tampon de sortie et désactive la temporisation de sortie.

Un exemple pour éclairer votre lanterne :
Code à placer en premier dans la page avant même le HTML

$identifiant_de_votre_page = 'toto'; // pour faire un test

$noCache = false; //cette variable va vous permettre d'activer ou non le cache
$cacheFolder = './mon_cache/'; //cette variable indique le chemin du dossier de cache
$cacheFile = $cacheFolder.$identifiant_de_votre_page.'.html'; //$identifiant_de_votre_page correspont à un identifiant de votre page, un numéro, un nom...
if(is_file($cacheFile) && !$noCache) { // test si $cacheFile est bien un fichier et que le système de cache est actif
	if(date ("d", filemtime($cacheFile)) == date("d")){ // on regarde si le cache n'est pas périmé. dans notre cas le cache a une durée de vie de 1 jour <br />
		foreach(file($cacheFile) as $one) {
			echo $one;// on affiche le contenu du cache
		}
	}
}else{

	ob_start(); //on commence la mise en mémoire de la page

Votre page HTML

<"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<h1>Salut à tous</h1>
<div>Mon contenu</div>

fin du script php

$contentMain = ob_get_contents(); //récupération de ce qui est en mémoire
ob_end_clean(); // on vide la mémoire et on arrête la mise en mémoire des infos

//Maintenant on va écrire dans un fichier le contenu de la page
if(!$noCache) { // on écrit le fichier de cache
	$inF = fopen($cacheFile,"w");
	fwrite($inF,$contentMain);
	fclose($inF);
}

echo $contentMain; // affichage du contenu de la page
unset($contentMain); // pas obligatoire, mais permet d'éviter à php d'encombrer la mémoire en supprimant cette variable
}// fin du premier if

Voila c’est tout!

Tagués avec : ,
Publié dans PHP
Un commentaire pour “Système de cache rapide et simple
  1. Benoit dit :

    Très bon article, très clair sur le système de cache. Le code est extrêment bien commenté. Je suis étonné que personne ne laisse de commentaire, car il y a beaucoups de recherche sur les caches en php, et je suppose que cet article a dû être vu plus d’une fois.

    Rien à redire sur le syntaxe, peut-être que les lecteurs attendent une source à télécharger, sans les
    ? ;p

    En tout cas, ce système de cache avec ob…() est très simple, très utilisé, mais en fait très peut expliqué, ni commenté. En tout cas, pas aussi clairement.

    Donc, juste bravo ! et merci !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*