# Laver les tampons système

PHP apporte deux façons de vider (envoyer et supprimer le contenu) les tampons système : à travers l'appel de flush() et en activant le vidage de tampon implicite avec ob_implicit_flush() ou le paramètre implicit_flush de php.ini.

## Comportement de vidage de tampon de sortie

Avec le vidage de tampon implicite désactivé, PHP ne lave la sortie que lorsque flush() est appelée ou lorsque le script se termine.

Avec le vidage de tampon implicite activé, PHP tentera de laver après chaque bloc de code produisant de la sortie. La sortie dans ce contexte est des données de longueur non nulle qui sont :

- hors des balises `<?php ?>`
- afficher par des constructions de langage et des fonctions dont le but explicite est d'afficher des variables ou des chaînes fournies par l'utilisateur telles que echo, print, printf(), var_dump(), var_export(), vprintf()
- affichées par des fonctions dont le but est de collecter et de produire des données/informations sur le script en cours ou PHP telles que debug_print_backtrace(), phpcredits(), phpinfo(), ReflectionExtension::info()
- afficher par PHP sur une exception non capturée ou une erreur non gérée (sous réserve des paramètres de display_errors et error_reporting)
- tout ce qui est écrit dans `php://output`

> Note: Afficher des chaînes vides ou envoyer des en-têtes n'est pas considéré comme une sortie et ne déclenchera pas d'opération de vidage de tampon.

Avertissement

Si le vidage de tampon implicite est activé, les caractères de contrôle (par exemple `"\n"`, `"\r"`, `"\0"`) déclencheront également un vidage de tampon.

## Limitations

Cette fonctionnalité ne peut pas laver les tampons de sortie de niveau utilisateur. Pour les utiliser ensemble, les tampons de sortie de niveau utilisateur doivent être lavés avant de laver les tampons système pour que PHP produise une sortie.

Avertissement

Appeler flush() ou activer le vidage de tampon implicite peut interférer avec les gestionnaires de sortie des tampons de sortie de niveau utilisateur qui définissent et envoient des en-têtes dans un contexte web (par exemple ob_gzhandler()) en envoyant des en-têtes avant que ces gestionnaires ne le fassent.

La mise en tampon mise en œuvre par le logiciel/matériel sous-jacent ne peut pas être remplacée par PHP et doit être prise en compte lors de l'utilisation des fonctions de contrôle des tampons de PHP. Vérifier les paramètres de mise en tampon des serveurs web/navigateurs/consoles et travailler avec ceux-ci peut atténuer les problèmes potentiels. Travailler dans un contexte web, soit les paramètres de mise en tampon du serveur web ou la mise en tampon du script pourrait être ajustée pour fonctionner en tandem alors que travailler autour des stratégies de mise en tampon de divers navigateurs peut être réalisé en ajustant la mise en tampon dans le script PHP. Sur les consoles qui implémentent la mise en tampon de ligne, les caractères de nouvelle ligne pourraient être insérés aux endroits appropriés avant de vider la sortie.

## SAPI Differences In Flushing

Même si le vidage de tampon est implémenté par chaque SAPI de manière légèrement différente, ces implémentations tombent dans l'une des deux catégories :

- Les SAPIs utilisés dans un contexte web videront d'abord les en-têtes suivis de la sortie. `Apache2Handler`, `CGI`, `FastCGI` et `FPM` sont de tels SAPIs
- d'autre SAPIs tels que `CLI` et `embed` videront la sortie uniquement