CodeS-SourceS
Rechercher un code, un tuto, une réponse

Mise en place d'un systeme de cache rapidement

Juin 2017


Mise en place d'un système de cache pour son site



Introduction

Qu'est ce q'un système de cache ?


C'est tout simplement une méthode utilisée pour réduire la charge au serveur. En effet, nombreux sont ceux qui ont été révoqués par leur hébergeur à cause de la consommation excessives de ressources par leur application.

Qu'est ce qui consomme énormément les ressources serveur ?


En général, les requêtes SQL, surtout pour les sites qui utilisent les news, un livre d'or ou toute autre fonction faisant appel à MySQL

Dois-je à tout prix intégrer un système de cache pour mon site ?


Ceci ne dépendra que de votre application. Si vous comptabilisez, par exemple, la vue de votre page et que le nombre de page vues par minute atteint les 200, cela va sans dire. Vous aurez besoin de cache si vous ne voulez pas être mis dehors par votre hébergeur !!

Fonctionnement


Le cache est utilisé suivant le langage. Dans notre cas, en PHP, on s'en sert pour éviter à chaque chargement de page d'exécuter les requêtes sql.
Lorsque l'utilisateur veut accéder à une page qui exécute une avalanche de requêtes sql, le système de cache va effectuer ceci :
Le système vérifie si cette page a un cache. Ici deux cas se présentent :
  • Si le cache existe pour cette page, il vérifie la date de sa dernière modification en la comparant à un intervalle qui lui a été définit. Si le cache de la page est toujours valide, il n'effectue pas de requête SQL et il affiche juste « le serveur est soulagé ». Dans le cas contraire, il recrée le cache.
  • Si le cache n'existe pas il sera créé.


Maintenant que vous savez ce que c'est un cache, à quoi il sert et que vous comptabilisez 3000 requêtes par minute, on passe a l'étape suivante.

Mise en place du système de cache


Histoire de bien organiser notre projet :
  • Créez un dossier nommé cache à la racine de votre site,
  • Créez une page php, nommez la : caching-head.php. Cette page sera appelée au début de index.php,
  • Créez une autre page php, nommez la : caching-foot.php. Cette page sera appelée en fin de index.php,
  • Créez notre fameux index.php.

Les codes php


Je vous passe les codes bien détaillés :

Caching-head.php


< ?php
// On définit la duré de validité d'un fichier cache qui est de ici de 30 minutes
$expireTime = time () -1800 ;
// On définit une variable de type bool qui est destinée à index.php pour dire
    // si il doit ou non exécuter son code 
    //ou si le cache existe, son utilisation par la suite
$caching = FALSE ;

// On récupère l'url
$url = $_SERVER['REQUEST_URI'] ;

// On transforme l'adresse en nom de fichier
$url = str_replace('/','-',$url);

// On construit le chemin de notre fichier cache
$cacheFile = "cache/".$url. '.html' ;

// On verifie maintenant si le fichier cache existe ou pas
If( file_exists($cacheFile) ) {
    // Il existe. On doit maintenant vérifier si sa durée a expiré ou non
    // en utilisant la fonction
    // filemtime () qui revoit le timestamp au moment de la dernière
    // modification
    if (filemtime($cacheFile) < $expireTime) ) {
        // la page existe mais son cache a expiré
        // on démarre la bufferisation
        ob_start();
        // Avec la variable $caching a FALSE le script caching-foot.php
        // saura qu'il doit recréer le cache
    } else {
        // la page existe et le cache n'a pas expiré alors on lit le fichier
        // on met $caching a TRUE pour dire a index.php n'exécute pas ton contenu
        // et à caching-foot.php de ne pas recréer le cache
        $caching = TRUE ;
         readfile($cacheFile);
    }
} else {
    // Le fichier cache n'existe pas, on doit le créer
    // on démarre la bufferisation
    ob_start() ;
    // Avec $caching a FALSE les scripts ci-dessous sauront qu'aucun cache
    // n'existe pour cette url il doit être créé
}?>

Index.php


< ?php
// On inclut caching-head.php
Include 'caching-head.php' ;
// On teste maintenant la variable $caching si on doit oui ou non
// exécuter notre code
if ( !$caching) {
    // codez ici tout ce que bon vous semble.
    // testez par exemple avec l'affichage d'une
    // liste de news ou d'articles dans votre base
}
// On inclut caching-foot.php
Include `caching-foot.php' ;
?>

Caching-foot.php


< ?php
// On teste si on doit recréer ou non le cache
If ( !$caching) {
    // Le cache n'existe pas on doit le créer
    // on récupère le contenu du buffer
    $buffer = ob_get_contents();
    // on crée un cache pour l'url correspondante
    // on ouvre le fichier en mode création
    $fp = fopen($cacheFile, "w");
    // Si l'ouverture du fichier s'est bien déroulée
    if ($fp) {
        // on écrit le contenu du buffer dans le fichier cache
        fputs($fp,$buffer);
        // On ferme le fichier
        fclose($fp);
     }
    // On efface le buffer et on affiche
    ob_clean() ;
    ob_end_flush() ;
}
?>

Explications


Voila votre système de cache est en place voici le fonctionnement du script en résumé.

Index.php est la page de base. C'est elle qui sera chargée par le navigateur.
Elle contient le code permettant de traiter des données provenant de la base de données.
Dans son tout début, il (le code) fait appel à caching-head.php afin de savoir si il y a un cache ou non pour l'url courante.
A l'aide d'une variable booléenne, il dit à index.php d'exécuter ou non son traitement. index.php doit tester si cette variable est à TRUE ou FALSE. Si elle est à TRUE, il n'exécute pas son traitement, si non il l'exécute.
Après ça, il laisse la main à caching-foot.php qu'il a inclut en fin de page. Ce script, doit créer (ou recréer) le cache, en se basant également sur la variable booléenne $caching.

Test


Je suis un peu feignant pour écrire un code de test.
Vous avez juste à faire un select dans la page index.php pour récupérer des données d'une table.
Si vous exécutez la page pour la première fois, allez dans votre base de données et modifiez manuellement l'une des valeurs de la table dont vous avez extrait les données.
Vous verrez que vos changement ne seront visible qu'au bout de 30 minutes, car c'est cette valeur qu'on a définit pour que le cache soit recréé.

Conclusion


Bon voila la démarche à faire pour avoir un système de cache opérant. Optez pour l'améliorer surtout au niveau de la construction du nom du fichier cache et sachez que ce code est limité, s'il s'agit d'une page qui doit faire une pagination .

Je vous souhaite une bonne lecture. Les codes que j'ai écrit, je les ai écrit à la volée et je ne les ai pas testé. Je serai la pour vos questions et suggestions.

A voir également

Publié par devil_may_cry.
Ce document intitulé «  Mise en place d'un systeme de cache rapidement  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Un système de template simple et efficace avec les fonctions natives de php
Donnez du reflet à vos textes !