Tampons de sortie au niveau utilisateur

Sommaire

La bufferisation de sortie au niveau utilisateur de PHP peut ĂȘtre commencĂ©e, manipulĂ©e et terminĂ©e depuis le code PHP. Chacun de ces tampons inclut un tampon de sortie et une fonction de gestion de sortie associĂ©e.

Démarrer un tampon de sortie

Les tampons de sortie au niveau utilisateur peuvent ĂȘtre dĂ©marrĂ©s en utilisant la fonction ob_start() ou en dĂ©finissant les paramĂštres output_buffering et output_handler de php.ini. Tant l'un que l'autre peuvent crĂ©er des tampons de sortie, ob_start() est plus flexible car il accepte des fonctions dĂ©finies par l'utilisateur comme gestionnaires de sortie et les opĂ©rations autorisĂ©es sur le tampon (flush, clean, remove) peuvent ĂȘtre dĂ©finies Ă©galement. Les tampons de sortie dĂ©marrĂ©s avec ob_start() seront actifs Ă  partir de la ligne oĂč la fonction a Ă©tĂ© appelĂ©e, tandis que ceux dĂ©marrĂ©s avec output_buffering bufferiseront la sortie Ă  partir de la premiĂšre ligne du script.

PHP est Ă©galement livrĂ© avec un gestionnaire de sortie intĂ©grĂ© "URL-Rewriter" qui dĂ©marre son propre tampon de sortie et ne permet que deux instances de celui-ci Ă  fonctionner en mĂȘme temps (une pour la réécriture d'URL au niveau utilisateur et une pour le support transparent des identifiants de session). Ces tampons peuvent ĂȘtre dĂ©marrĂ©s en appelant la fonction output_add_rewrite_var() et/ou en activant le paramĂštre session.use_trans_sid de php.ini.

L'extension zlib a son propre tampon de sortie qui peut ĂȘtre activĂ© en utilisant le paramĂštre zlib.output_compression de php.ini.

Note: Tant que "URL-Rewriter" est spĂ©cial en ce qu'il ne permet que deux instances de celui-ci Ă  fonctionner en mĂȘme temps, tous les tampons de sortie au niveau utilisateur utilisent les mĂȘmes tampons sous-jacents utilisĂ©s par ob_start() avec leur fonctionnalitĂ© implĂ©mentĂ©e par une fonction de gestion de sortie personnalisĂ©e. En tant que tel, toute leur fonctionnalitĂ© peut ĂȘtre Ă©mulĂ©e par du code utilisateur.

Laver, accéder et nettoyer le contenu du tampon

Laver envoie et supprime le contenu du tampon actif. Les tampons de sortie sont lavés lorsque la taille de la sortie dépasse la taille du tampon, le script se termine ou ob_flush(), ob_end_flush(), ou ob_get_flush() est appelé.

Attention

Appeler ob_end_flush() ou ob_get_flush() désactivera le tampon actif.

Attention

Laver les tampons va laver la valeur de retour du gestionnaire de sortie qui peut différer du contenu du tampon. Par exemple, utiliser ob_gzhandler() va compresser la sortie et laver la sortie compressée.

Le contenu du tampon actif peut ĂȘtre rĂ©cupĂ©rĂ© en appelant ou ob_get_flush().

Si seule la longueur du contenu du tampon est nécessaire, ob_get_length() ou ob_get_status() va retourner la longueur du contenu en octets.

Attention

Appeler ob_get_clean() ou ob_get_flush() désactivera le tampon actif aprÚs avoir retourné son contenu.

Le contenu du tampon actif peut ĂȘtre nettoyĂ© en appelant ob_clean(), ob_end_clean() ou ob_get_clean().

Attention

Appeler ob_end_clean() ou ob_get_clean() désactivera le tampon actif.

Désactiver les tampons

Les tampons de sortie peuvent ĂȘtre dĂ©sactivĂ©s en appelant ob_end_clean(), ob_end_flush(), ob_get_flush() ou ob_get_clean().

Avertissement

Les tampons de sortie dĂ©marrĂ©s sans le drapeau PHP_OUTPUT_HANDLER_REMOVABLE ne peuvent pas ĂȘtre dĂ©sactivĂ©s et gĂ©nĂ©reront une E_NOTICE.

Chaque tampon de sortie qui n'a pas Ă©tĂ© dĂ©sactivĂ© Ă  la fin du script ou lorsque exit() est appelĂ© sera lavĂ© et dĂ©sactivĂ© par le processus de terminaison de PHP. Les tampons seront lavĂ©s et dĂ©sactivĂ©s dans l'ordre inverse de leur dĂ©marrage. Le dernier tampon dĂ©marrĂ© sera le premier, le premier tampon dĂ©marrĂ© sera le dernier Ă  ĂȘtre lavĂ© et dĂ©sactivĂ©.

Attention

Si le vidage de tampon du contenu du tampon n'est pas dĂ©sirĂ©, un gestionnaire de sortie personnalisĂ© doit ĂȘtre utilisĂ© pour empĂȘcher le vidage de tampon lors de la fermeture.

Exceptions lancées dans les gestionnaires de sortie

Si une exception non capturée est lancée dans un gestionnaire de sortie le programme se termine et le gestionnaire est invoqué par le processus de terminaison aprÚs quoi le message d'erreur "Uncaught Exception" est retourné.

Si l'exception non capturée est lancée dans un gestionnaire invoqué par ob_flush(), ob_end_flush() ou ob_get_flush(), le contenu du tampon est lavé avant le message d'erreur.

Si une exception non capturée est lancée dans un gestionnaire de sortie pendant la terminaison, le gestionnaire est terminé et ni le contenu du tampon ni le message d'erreur ne sont lavés.

Note: Si un gestionnaire lance une exception son drapeau PHP_OUTPUT_HANDLER_DISABLED est défini.

Erreurs levées dans les gestionnaires de sortie

Si une erreur non fatale est levée dans un gestionnaire de sortie le programme continue son exécution.

Si une erreur non fatale est levée dans un gestionnaire invoqué par ob_flush(), ob_end_flush() ou ob_get_flush(), le tampon vide certaines données en fonction de la valeur de retour du gestionnaire. Si le gestionnaire retourne false le tampon et le message d'erreur sont lavés. Si le gestionnaire retourne autre chose, la valeur de retour du gestionnaire est lavée mais pas le message d'erreur.

Note: Si un gestionnaire retourne false son drapeau PHP_OUTPUT_HANDLER_DISABLED est défini.

Si une erreur fatale est levée dans un gestionnaire de sortie le programme se termine et le gestionnaire est invoqué par le processus de terminaison aprÚs quoi le message d'erreur est lavé.

Si l'erreur fatale est levée dans un gestionnaire invoqué par ob_flush(), ob_end_flush() ou ob_get_flush(), le contenu du tampon est lavé avant le message d'erreur.

Si une erreur fatale est levée dans un gestionnaire de sortie pendant la terminaison le programme se termine sans laver le contenu du tampon ou le message d'erreur.

Sortie dans les gestionnaires de sortie

Dans des circonstances spécifiques, la sortie produite dans le gestionnaire est lavée avec le contenu du tampon. Cette sortie n'est pas ajoutée au tampon et ne fait pas partie de la chaßne retournée par ob_get_flush().

Durant les opĂ©rations de vidage de tampon (appel de ob_flush(), ob_end_flush(), ob_get_flush() et pendant la terminaison) si la valeur de retour d'un gestionnaire est false le contenu du tampon est lavĂ© suivi de la sortie. Si le gestionnaire n'est pas invoquĂ© pendant la terminaison le gestionnaire lançant une exception ou l'appel de exit() rĂ©sulte dans le mĂȘme comportement.

Note: Si un gestionnaire retourne false son drapeau PHP_OUTPUT_HANDLER_DISABLED est défini.

Drapeaux d'état des gestionnaires de sortie

Les drapeaux d'état des gestionnaires du masque de bits flags du tampon sont définis à chaque invocation du gestionnaire de sortie et font partie du masque de bits flags retourné par ob_get_status(). Si le gestionnaire exécute avec succÚs et ne retourne pas false, PHP_OUTPUT_HANDLER_STARTED et PHP_OUTPUT_HANDLER_PROCESSED sont définis. Si le gestionnaire retourne false ou lance une exception pendant l'exécution, PHP_OUTPUT_HANDLER_STARTED et PHP_OUTPUT_HANDLER_DISABLED sont définis.

Note: Si PHP_OUTPUT_HANDLER_DISABLED d'un gestionnaire est défini, le gestionnaire ne sera pas invoqué en appelant ob_end_clean(), ob_end_flush(), ob_get_clean(), ob_get_flush(), ob_clean(), ob_flush() ou pendant le processus de terminaison de PHP. Avant PHP 8.4.0, ce drapeau n'avait aucun effet lors de l'appel de la fonction ob_clean() ou ob_flush().

add a note

User Contributed Notes

There are no user contributed notes for this page.