W3docs

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 :

  1. Obtenir — renvoie le contenu actuel du tampon de sortie le plus récent sous forme de chaîne.
  2. Nettoyer — supprime ce tampon et le désactive (équivalent à ob_get_contents() suivi de ob_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|false

Elle 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 output

Sortie :

THIS WILL BE BUFFERED

La 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

FonctionRenvoie le contenu ?Arrête la mise en tampon ?Envoie au tampon suivant/navigateur ?
ob_get_clean()OuiOuiNon (supprimé)
ob_get_contents()OuiNonNon (le tampon reste actif)
ob_end_clean()NonOuiNon (supprimé)
ob_get_flush()OuiOuiOui (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. Appeler ob_get_clean() sans ob_start() correspondant renvoie false et émet un avertissement. Protégez-vous avec ob_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 non false. Utilisez === false pour 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().

Pratique

Pratique
Que fait la fonction 'ob_get_clean()' en PHP ?
Que fait la fonction 'ob_get_clean()' en PHP ?
Was this page helpful?