# Bufferisation de sortie

La bufferisation de sortie est le stockage tamponné (temporaire) de la sortie avant qu'elle ne soit lavée (envoyée et supprimée) au navigateur (dans un contexte web) ou au shell (en ligne de commande). Tant que la bufferisation de sortie est active, aucune sortie n'est envoyée par le script, au lieu de cela, la sortie est stockée dans un tampon interne.

## Effets de la bufferisation sur PHP

PHP dépend de l'infrastructure logicielle/matérielle sous-jacente lors du vidage de tampon de la sortie. La bufferisation implémentée par les consoles en ligne de commande (par exemple, en mode ligne) ou les serveurs web et les navigateurs dans un contexte web (par exemple, entièrement bufferisé) affectent quand la sortie est affichée à l'utilisateur final. Certains de ces effets peuvent être éliminés en ajustant finement les paramètres du serveur et/ou en alignant les tailles des tampons des différentes couches.

## Contrôle de la bufferisation de sortie en PHP

PHP apporte un tampon de sortie utilisateur entièrement bufferisé avec des fonctions pour démarrer, manipuler et désactiver le tampon (la plupart des fonctions ob_*), et deux fonctions pour laver les tampons système sous-jacents (flush() et ob_implicit_flush()). Certaines de ces fonctionnalités peuvent être définies et/ou configurées en utilisant les paramètres php.ini appropriés.

## Use Cases

La bufferisation de sortie est généralement utile dans des situations où la sortie bufferisée est modifiée ou inspectée, ou elle est utilisée plus d'une fois dans une requête ; ou lorsque le vidage de tampon contrôlé de la sortie est désiré. Les cas d'utilisation spécifiques incluent :

- mettre en cache le résultat de scripts de calcul/temps intensifs par exemple en générant des pages `HTML` statiques
- réutiliser la sortie générée en l'affichant, en la sauvegardant dans un fichier et/ou en l'envoyant par email
- laver la `head` d'une page `HTML` séparée du `body` permet aux navigateurs de charger des ressources externes pendant que le script exécute des processus potentiellement plus longs (par exemple, accès à une base de données/fichier, connexion réseau externe). Ceci est utile uniquement si le code d'état `HTTP` ne peut pas changer après l'envoi des en-têtes
- extraire des informations de fonctions qui produiraient autrement une sortie (par exemple phpinfo())
- controller la sortie de code tiers en modifiant/utilisant des parties (par exemple, extraire des données, remplacer des mots/phrases, ajouter des balises `HTML` manquantes), ou en la supprimant entièrement dans certaines conditions (par exemple, erreurs)
- Polyfiller certaines fonctionnalités de serveur web indisponibles (par exemple, compresser ou encoder la sortie)