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.
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 :
<?php ?>
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.
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.
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.
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.
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 :
Apache2Handler
, CGI
,
FastCGI
et FPM
sont de tels SAPIs
CLI
et embed
videront la sortie uniquement