Fonction PHP ob_get_clean() : tout ce que vous devez savoir
Découvrez la fonction ob_get_clean() en PHP : comment capturer le contenu du tampon de sortie et désactiver la mise en tampon en une seule opération.
La fonction ob_get_clean() capture tout ce que PHP a écrit dans le tampon de sortie, le renvoie sous forme de chaîne et désactive le tampon en une seule étape. C'est le moyen standard de récupérer la sortie générée dans une variable plutôt que de l'envoyer directement au navigateur — utile pour les systèmes de gabarits, la mise en cache d'un fragment rendu ou le post-traitement du HTML avant son affichage.
Cette page explique ce que retourne ob_get_clean(), en quoi il diffère des fonctions de tampon associées, ainsi que les modèles pratiques et les pièges à éviter lors de son utilisation.
Ce que fait ob_get_clean()
La mise en tampon de sortie permet à PHP de collecter la sortie (provenant de echo, print, printf, et même du HTML brut entre ?> et <?php) en mémoire plutôt que de l'envoyer immédiatement. On l'active avec ob_start(), puis on capture ou libère le contenu mis en tampon ultérieurement.
ob_get_clean() effectue deux opérations à la fois :
- Obtenir — renvoie le contenu actuel du tampon de sortie le plus récent sous forme de chaîne.
- Nettoyer — supprime ce tampon et le désactive (équivalent à
ob_get_contents()suivi deob_end_clean()).
Comme elle lit et supprime le tampon en même temps, aucune sortie capturée n'atteint le navigateur à moins que vous ne l'affichiez vous-même avec echo.
Syntaxe
ob_get_clean(): string|falseElle ne prend aucun argument. Elle renvoie le contenu du tampon sous forme de string en cas de succès, ou false si la mise en tampon de sortie n'est pas active (c'est-à-dire s'il n'y a aucun tampon à lire).
Exemple de base
<?php
ob_start(); // start buffering
echo "This will be buffered"; // captured, not printed
$output = ob_get_clean(); // grab it and stop buffering
echo strtoupper($output); // now we control the outputSortie :
THIS WILL BE BUFFEREDLa ligne echo "This will be buffered" n'atteint jamais le navigateur par elle-même — elle est stockée dans le tampon, renvoyée dans $output, et n'est affichée qu'après la transformation avec strtoupper().
Utilisation pratique : capturer un gabarit rendu
Une utilisation courante est de rendre un fichier gabarit sous forme de chaîne afin de pouvoir le retourner, le mettre en cache ou l'envoyer par e-mail :
<?php
function renderTemplate(string $file, array $data): string
{
extract($data); // turn array keys into local variables
ob_start();
include $file; // the template's HTML/echo output is buffered
return ob_get_clean(); // return it as a string
}
// Usage (assuming a greeting.php that echoes "Hello, $name!"):
// $html = renderTemplate('greeting.php', ['name' => 'Ada']);Ici, le fichier inclus peut contenir du HTML ordinaire et des balises <?= $name ?> ; ob_get_clean() transforme l'ensemble du résultat rendu en une chaîne retournable au lieu de l'afficher.
ob_get_clean() vs. fonctions associées
| Fonction | Renvoie le contenu ? | Arrête la mise en tampon ? | Envoie au tampon suivant/navigateur ? |
|---|---|---|---|
ob_get_clean() | Oui | Oui | Non (supprimé) |
ob_get_contents() | Oui | Non | Non (le tampon reste actif) |
ob_end_clean() | Non | Oui | Non (supprimé) |
ob_get_flush() | Oui | Oui | Oui (vidé) |
Utilisez ob_get_clean() lorsque vous souhaitez la sortie capturée et que vous ne voulez pas qu'elle soit envoyée automatiquement.
Pièges courants
- Aucun tampon actif →
false. Appelerob_get_clean()sansob_start()correspondant renvoiefalseet émet un avertissement. Protégez-vous avecob_get_level()ou assurez-vous que la mise en tampon est activée. - Cela n'affecte que le tampon le plus récent. Les tampons s'imbriquent. Si vous avez appelé
ob_start()deux fois,ob_get_clean()ferme uniquement le plus interne ; le tampon externe reste actif. - La sortie est perdue après l'appel. Une fois nettoyé, le tampon est vide — appelez-le une seule fois et stockez le résultat dans une variable si vous en avez besoin plusieurs fois.
- Comparaison stricte pour la vacuité. Un tampon vide renvoie
"", et nonfalse. Utilisez=== falsepour distinguer « aucun tampon » de « le tampon était vide ».
Conclusion
ob_get_clean() est la fonction de référence lorsque vous avez besoin de la sortie mise en tampon sous forme de chaîne et souhaitez désactiver la mise en tampon ensuite, sans rien envoyer au navigateur. Elle s'associe naturellement à ob_start() et constitue la base de modèles tels que le rendu de gabarits et la mise en cache de sortie. Pour les opérations associées — garder le tampon ouvert, le vider ou simplement le supprimer — consultez ob_get_contents(), ob_get_flush() et ob_end_clean().