Cache de sortie en PHP avec ob_start (output buffer)

Avril 2013

En PHP, à chaque fois qu'on affiche du texte (avec la fonction echo / print ou alors en fermant la balise php), ce texte est envoyé au navigateur. Mais il est possible d'empêcher ça, en mettant en cache la sortie, pour pouvoir ensuite récupérer le texte normalement envoyé au client dans une variable.

Cette technique est très utile pour effectuer un post-traitement sur le code source de la page avant de l'envoyer, pour compresser la sortie (gzip), ou encore pour créer un système d'include flexible permettant de modifier les headers (en évitant de se prendre une erreur "Warning: Cannot modify header information - headers already sent by (output started at...".

Pour cela, il faut utiliser les fonctions d'output buffer, qui commencent toutes par ob_ :

  • ob_start() : démarre la mise en cache de la sortie. À partir du moment ou vous appelez cette fonction, tout ce que vous écrirez pourra être retenu contre vous, vous avez le droit de garder le silence sera mis en cache
  • ob_end_clean() : vide le buffer (pour faire de la place en mémoire) et arrête la mise en cache
  • ob_end_flush() : affiche le buffer (ça envoi son contenu au navigateur) et le vide, puis arrête la mise en cache
  • ob_get_clean() : retourne le contenu du buffer (chaine de caractère) et arrête la mise en cache

Il existe d'autres fonctions d'output control qui sont souvent utilisées, vous les trouverez ici : ref.outcontrol.php. Notez qu'il n'existe pas de fonction ob_stop() ou ob_end().

La page du jour est changer l'ordre des colonnes excel, bonne lecture.

Voici un petit exemple :

<?php ob_start(); ?>
<div>
	<h3>Du code HTML</h3>
	<p>Mis en cache avec ob_start pour être affiché ensuite !</p>
</div>
<?php
$content = ob_get_clean();
header('Content-Type: text/html; charset=utf-8');
echo $content;
?>

Encore faim ? allez lire ça : typo tower !

1 commentaire :
commentaire n°3474 par ego
ego samedi 18 mars 2017, 20:47
Merci pour ton explication
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré