PHP ofrece dos formas de vaciar (enviar y eliminar el contenido) los búferes del sistema: mediante la llamada a flush() y activando el vaciado de búfer implícito con ob_implicit_flush() o el parámetro implicit_flush de php.ini.
Con el vaciado de búfer implícito desactivado, PHP solo vacía la salida cuando se llama a flush() o cuando finaliza el script.
Con el vaciado de búfer implícito activado, PHP intentará vaciar después de cada bloque de código que produzca salida. La salida en este contexto son datos de longitud no nula que son:
<?php ?>
php://output
Nota: Mostrar strings vacíos o enviar encabezados no se considera salida y no desencadenará una operación de vaciado de búfer.
Si el vaciado de búfer implícito está activado, los caracteres de control
(por ejemplo "\n"
, "\r"
,
"\0"
)
también desencadenarán un vaciado de búfer.
Esta funcionalidad no puede vaciar los búferes de salida a nivel de usuario. Para usarlos juntos, los búferes de salida a nivel de usuario deben ser vaciados antes de vaciar los búferes del sistema para que PHP produzca una salida.
Llamar a flush() o activar el vaciado de búfer implícito puede interferir con los manejadores de salida de los búferes de salida a nivel de usuario que definen y envían encabezados en un contexto web (por ejemplo ob_gzhandler()) al enviar encabezados antes de que estos manejadores lo hagan.
El almacenamiento en búfer implementado por el software/hardware subyacente no puede ser reemplazado por PHP y debe ser tenido en cuenta al utilizar las funciones de control de búferes de PHP. Verificar los parámetros de almacenamiento en búfer de los servidores web/navegadores/consolas y trabajar con ellos puede mitigar los problemas potenciales. Trabajando en un contexto web, ya sea los parámetros de almacenamiento en búfer del servidor web o el almacenamiento en búfer del script podrían ser ajustados para funcionar en conjunto mientras que trabajar con las estrategias de almacenamiento en búfer de varios navegadores puede lograrse ajustando el almacenamiento en búfer en el script PHP. En las consolas que implementan el almacenamiento en búfer por línea, los caracteres de nueva línea podrían ser insertados en los lugares apropiados antes de vaciar la salida.
Aunque el vaciado de búfer es implementado por cada SAPI de manera ligeramente diferente, estas implementaciones caen en una de dos categorías:
Apache2Handler
, CGI
,
FastCGI
y FPM
son tales SAPIs
CLI
y embed
vaciarán solo la salida