Lorsque vous demandez à un script PHP de s'exécuter, il vous renvoie 2 types d'informations :
- les informations invisibles par le visiteur : les en-têtes (avec header(), les cookies, les sessions, etc.)
- les informations visibles par le visiteur : le code XHTML (bref, votre page web).
Et c'est sur ce fameux code XHTML, ou plutôt sur son affichage, que l'on va travailler.
La tamporisation de sortie
Il existe déjà
un tuto sur ce sujet, mais je vais vous montrer comment on peut s'en servir. Le code XHTML que le serveur retourne au client est créé grâce à la fonction
echo, mais on peut faire en sorte d'empêcher les
echo de nous retourner directement le code ; on va pour cela utiliser la fonction
ob_start().
Code : PHP1
2
3 | <?php
echo'Une phrase de la mort qui tue';
?>
|
Code : PHP1
2
3
4
5 | <?php
ob_start(); // ouverture de la mise en tampon
echo'Une phrase de la mort qui tue';
ob_end_clean(); // fermeture de la tamporisation de sortie et effacement du tampon
?>
|
Tout ce qui est ouvert doit être fermé, la fonction ob_start() permet d'ouvrir la tamporisation de sortie et stocke les informations dans le tampon. La fonction ob_end_clean(), elle, ferme cette tamporisation de sortie et vide le tampon.
Si vous essayez ces deux codes, vous verrez que le premier vous génère bien du code XHTML, mais pour le second, vous vous retrouvez avec une page blanche. L'
ob_start() a mis en tampon votre texte, on peut dire qu'il le garde sous le coude jusqu'à ce que vous lui demandiez de vous le ressortir. Ça tombe bien : je vais vous montrer comment faire.
Code : PHP1
2
3
4
5 | <?php
ob_start();
echo'Une phrase de la mort qui tue';
ob_end_flush(); // affichage du tampon
?>
|
Et là miracle

, il vous affiche le texte. La fonction
ob_end_flush() sert à afficher les données stockées dans le tampon et à éteindre la tamporisation de sortie (que l'on avait ouverte avec
ob_start()) ; l'ennui, c'est que cette fonction détruit aussi le tampon, on ne pourra donc pas le récupérer par la suite.
C'est bien sympa ton truc, mais comment on s'en sert pour créer un cache ?
La récupération du tampon
Tant que le tampon n'est pas détruit ou fermé, on peut le récupérer grâce à la fonction
ob_get_contents().
Code : PHP1
2
3
4
5
6
7 | <?php
ob_start(); // ouverture du tampon
echo'Une phrase de la mort qui tue';
$tampon = ob_get_contents(); // stockage du tampon dans une chaîne de caractères
ob_end_clean(); // fermeture de la tamporisation de sortie et effacement du tampon
echo $tampon ;
?>
|
Cela vous affiche la même page que le code précédent à une différence près : le tampon est stocké dans une variable sous forme d'une chaîne de caractères ; de plus, le tampon n'est pas détruit.
Donc, si au lieu de faire un echo, on récupérait cette chaîne de caractères et on la stockait dans un fichier, on pourrait par la suite lire ce fichier ?
Je suis content de voir que vous avez compris

; effectivement, on peut écrire cette chaîne dans un fichier grâce à la fonction
file_put_contents. Cette fonction a besoin de 2 arguments.
- Premier argument : le nom du fichier où l'on doit écrire les données (par exemple index.html).
- Deuxième argument : ce que l'on veut écrire dans le fichier ; ici, ce sera la variable $tampon qui contient notre chaîne de caractères.
La fonction file_put_contents ne marche qu'avec PHP5, il faut donc vous assurer que votre code PHP sera bien exécuté avec PHP5 ; pour cela, il faut ajouter à votre .htaccess la ligne suivante :
AddType x-mapp-php5 .php
cela obligera PHP à utiliser PHP5.
Code : PHP1
2
3
4
5
6
7 | <?php
ob_start();
echo'Une phrase de la mort qui tue';
$tampon = ob_get_contents();
file_put_contents('cache/index.html', $tampon) ; //pour une meilleure organisation, on créera un répertoire cache pour y stocker les fichiers du cache
ob_end_clean(); // toujours fermer et vider le tampon
?>
|
Et donc maintenant, si on lit le fichier
index.html, cela nous affichera notre texte

.
Code : PHP1
2
3 | <?php
readfile('cache/index.html');
?>
|
Vous savez maintenant stocker dans un fichier du texte généré par un code PHP, c'est le principe même du cache PHP. On va maintenant voir comment s'en servir de manière pratique.