Cache de sortie en PHP avec ob_start (output buffer)
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 écrirezpourra être retenu contre vous, vous avez le droit de garder le silencesera mis en cacheob_end_clean()
: vide le buffer (pour faire de la place en mémoire) et arrête la mise en cacheob_end_flush()
: affiche le buffer (ça envoi son contenu au navigateur) et le vide, puis arrête la mise en cacheob_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 !