Fonction PHP ob_get_flush() : tout ce que vous devez savoir
Découvrez la fonction ob_get_flush() en PHP : comment elle récupère le contenu du tampon de sortie et le vide en un seul appel.
En tant que développeur PHP, vous pourriez avoir besoin de récupérer le contenu du tampon de sortie et de le vider simultanément. La fonction ob_get_flush() est une fonction intégrée de PHP qui effectue ces deux opérations en un seul appel : elle retourne le contenu actuel du tampon sous forme de chaîne et l'envoie au niveau de sortie suivant. Cet article explique comment elle fonctionne, ce qu'elle retourne, et quand l'utiliser plutôt que les autres fonctions de contrôle de sortie.
Qu'est-ce que la fonction ob_get_flush() ?
La mise en tampon de sortie permet à PHP de collecter tout ce que vous écrivez avec echo ou print en mémoire, au lieu de l'envoyer directement au navigateur. Vous démarrez un tampon avec ob_start(), écrivez dedans normalement, puis décidez de ce que vous voulez faire avec la sortie capturée.
ob_get_flush() effectue trois choses en une seule étape :
- Récupère le contenu du tampon de sortie actif (le plus haut) et le retourne sous forme de chaîne.
- Vide ce contenu — l'envoie au niveau de tampon suivant, ou au navigateur si aucun autre niveau n'existe.
- Ferme ce niveau de tampon (un niveau d'imbrication est supprimé).
C'est donc une combinaison pratique de ob_get_contents() (lecture) et ob_end_flush() (envoi + fermeture).
Syntaxe
ob_get_flush(): string|falseParamètres
ob_get_flush() ne prend aucun paramètre.
Valeur de retour
La fonction retourne le contenu du tampon de sortie actif sous forme de chaîne. Si la mise en tampon de sortie n'est pas active (aucun tampon à vider), elle retourne false et génère une notice. Démarrez toujours un tampon avec ob_start() avant de l'appeler.
Comment utiliser la fonction ob_get_flush()
Le principe est le suivant : démarrer un tampon, y écrire, puis appeler ob_get_flush() pour le capturer et le libérer.
<?php
ob_start();
echo "This will be buffered";
// Capture the buffer, flush it to the browser, and close the level.
$output = ob_get_flush();
echo "\nCaptured copy: " . $output;Résultat :
This will be buffered
Captured copy: This will be bufferedIci, "This will be buffered" est collecté dans le tampon plutôt qu'affiché immédiatement. ob_get_flush() retourne ce texte (ainsi $output le contient) et l'envoie en même temps au navigateur — c'est pourquoi la phrase apparaît deux fois : une fois lors du vidage, et une fois lors du echo final.
Si la mise en tampon n'est pas active au moment de l'appel, vous obtenez false en retour :
<?php
$output = ob_get_flush(); // No ob_start() was called
var_dump($output); // bool(false)ob_get_flush() par rapport aux fonctions associées
| Fonction | Retourne le contenu ? | Envoie vers la sortie ? | Ferme le tampon ? |
|---|---|---|---|
ob_get_flush() | Oui (chaîne) | Oui | Oui |
ob_end_flush() | Non (bool) | Oui | Oui |
ob_get_clean() | Oui (chaîne) | Non (ignoré) | Oui |
ob_get_contents() | Oui (chaîne) | Non | Non |
Choisissez ob_get_flush() lorsque vous souhaitez à la fois conserver une copie de la sortie mise en tampon (pour la journaliser, l'inspecter ou la modifier) et l'envoyer quand même au navigateur. Si vous avez seulement besoin de l'envoyer, utilisez ob_end_flush() ; si vous voulez la récupérer sans l'envoyer, utilisez ob_get_clean().
Conclusion
La fonction ob_get_flush() récupère le tampon de sortie actif sous forme de chaîne tout en le vidant et en le fermant en un seul appel. En comprenant sa liste de paramètres vide, sa valeur de retour string|false et son comportement de fermeture de tampon, vous pouvez gérer les flux de sortie avec plus de précision. Pour aller plus loin, explorez ob_start() pour ouvrir des tampons, ob_get_level() pour vérifier la profondeur d'imbrication, et ob_flush() pour vider sans fermer.