Fonction PHP ob_get_contents() : tout ce que vous devez savoir
Découvrez comment utiliser ob_get_contents() en PHP pour lire le contenu du tampon de sortie et le capturer sous forme de chaîne.
Normalement, lorsque votre script exécute echo ou print, PHP envoie immédiatement le résultat au navigateur. La mise en tampon de sortie vous permet d'intercepter cette sortie et de la conserver en mémoire, afin de pouvoir la capturer, la modifier ou la supprimer avant qu'elle n'atteigne le client. La fonction ob_get_contents() est l'outil qui vous permet de lire ce qui se trouve actuellement dans ce tampon.
Ce chapitre explique ce que renvoie ob_get_contents(), quand l'utiliser, les pièges à éviter et comment elle s'intègre aux autres fonctions de contrôle de sortie.
Ce que fait ob_get_contents()
ob_get_contents() retourne le contenu du tampon de sortie actif sans le vider ni arrêter la mise en tampon. Le tampon continue de collecter les sorties, vous pouvez donc appeler la fonction plusieurs fois pour voir ce qui s'est accumulé jusqu'à présent.
Elle ne fonctionne que lorsqu'un tampon démarré par ob_start() est actif. S'il n'y a pas de tampon actif, elle retourne false.
Syntaxe
ob_get_contents(): string|false- Paramètres : aucun.
- Valeur de retour : le contenu actuel du tampon sous forme de chaîne, ou
falsesi la mise en tampon de sortie n'est pas active.
Un exemple de base
<?php
ob_start(); // 1. Start capturing output
echo "This will be buffered"; // 2. Goes into the buffer, not the screen
$output = ob_get_contents(); // 3. Read the buffer into a variable
ob_end_clean(); // 4. Discard the buffer and stop buffering
echo "Captured: " . $output;Cela affiche :
Captured: This will be bufferedIci ob_start() commence la mise en tampon, de sorte que l'echo est conservé en mémoire plutôt qu'envoyé au navigateur. ob_get_contents() copie ce texte dans $output. Enfin, ob_end_clean() supprime le tampon et désactive la mise en tampon — sans cela, le texte mis en tampon serait quand même envoyé à la page.
ob_get_contents() ne vide pas le tampon
Un point de confusion fréquent : lire le tampon le laisse intact. La sortie est toujours présente et sera envoyée au navigateur lorsque la mise en tampon se termine (sauf si vous le nettoyez).
<?php
ob_start();
echo "Hello";
$first = ob_get_contents(); // "Hello"
echo " World";
$second = ob_get_contents(); // "Hello World" — the buffer kept growing
ob_end_flush(); // sends "Hello World" to the browser
var_dump($first, $second);Cela affiche :
Hello World
string(5) "Hello"
string(11) "Hello World"Si vous souhaitez plutôt lire et effacer le tampon en une seule étape, utilisez ob_get_clean().
Quand l'utiliser ?
- Capturer une sortie générée. Rendre un template ou inclure un fichier, puis récupérer le résultat sous forme de chaîne au lieu de l'afficher — pratique pour les e-mails, la mise en cache ou la génération d'un fichier.
- Post-traitement HTML. Mettre en tampon une page, la lire avec
ob_get_contents(), effectuer une transformation (minification, remplacement de variables), puis afficher le résultat. - Supprimer ou inspecter la sortie d'une fonction ou d'une bibliothèque qui affiche directement.
<?php
function renderGreeting(string $name): void
{
echo "<p>Hello, {$name}!</p>";
}
ob_start();
renderGreeting("Ada");
$html = ob_get_contents(); // capture instead of printing
ob_end_clean();
$html = str_replace("Hello", "Welcome", $html);
echo $html;Cela affiche :
<p>Welcome, Ada!</p>Pièges
- Retourne
false, pas une chaîne vide, quand aucun tampon n'est actif. Utilisez une vérification stricte (=== false) si vous devez distinguer « pas de tampon » de « tampon vide ». - Tampons imbriqués :
ob_get_contents()ne lit que le niveau de tampon le plus interne (actuel). Pour voir combien de tampons sont empilés, utilisezob_get_level(). - Elle n'arrête pas la mise en tampon. Associez-la à
ob_end_clean()ouob_end_flush()lorsque vous avez terminé.
Fonctions connexes
ob_start()— activer la mise en tampon de sortie.ob_get_clean()— obtenir le contenu du tampon et le supprimer.ob_get_length()— obtenir la taille du tampon en octets.- Présentation du contrôle de sortie PHP — la famille complète des fonctions
ob_*.
Conclusion
ob_get_contents() lit le tampon de sortie actuel sous forme de chaîne sans le vider ni arrêter la mise en tampon. C'est la brique de base pour capturer une sortie générée, post-traiter du HTML et supprimer les sorties directes. N'oubliez pas qu'elle retourne false quand aucun tampon n'est actif, et qu'elle laisse le tampon intact — utilisez ob_get_clean() lorsque vous souhaitez lire et effacer en une seule opération.