Lo que está tratando de lograr es una salida incremental para el navegador desde PHP.
Si esto se puede lograr puede depender de su servidor y de cómo está invocando PHP.
PHP bajo FastCGI
Usted es probablemente un poco más probabilidades de encontrarse con este tipo de problema cuando PHP se ejecuta en FastCGI más que como un módulo de Apache, debido a que el acoplamiento entre el servidor y los procesos de PHP no están tan estrechamente relacionados. La comunicación FastCGI utiliza el almacenamiento en búfer de salida una vez que los datos han salido de los procesos de PHP, con la salida enviada al navegador solo una vez que la solicitud está completa o este búfer se ha llenado. Además de esto, los procesos de PHP tienden a terminarse después de una cierta cantidad de tiempo, para evitar que cualquiera se ejecute por mucho tiempo.
Dicho esto, una combinación de ob_end_flush()
(o ob_flush()
) y flush()
debería hacer que PHP solicite que se borren los búferes de flujo descendente, por lo que esto aún puede funcionar. Es posible que también deba investigar si necesita extender el límite de tiempo para los scripts PHP.
PHP bajo mod_php
Si está utilizando mod_php, se puede escribir de forma incremental a cabo en el navegador. Use el comando flush() para asegurarse de que el módulo PHP lo descargue instantáneamente. Si no tiene un búfer de salida, o algún módulo de Apache como mod_gzip, entonces debería salir al instante al navegador del usuario. Además, puede mantener su script PHP ejecutándose todo el tiempo que desee (con set_time_limit() en PHP), bajo las configuraciones predeterminadas, aunque, por supuesto, consumirá algo de memoria.
Puede tener problemas con algunos navegadores que no comienzan a mostrar la página hasta que se descarga cierta cantidad de página. Algunas versiones de IE pueden esperar 1KB. Descubrí que Chrome puede esperar más. Mucha gente soluciona esto agregando relleno, como un comentario largo de 1 o 2 KB de longitud en la parte superior del documento.
¿Cuál es su navegador y contenido? Algunos navegadores no mostrarán HTML hasta que encuentren una etiqueta de cierre. El texto sin formato puede ser una mejor opción si desea contenido de "actualización en vivo". – mwalker
Esto parece ser un problema mejor abordado en el lado del cliente. Puede recuperar desde el servidor usando AJAX cada segundo. –
esto es absolutamente algo que NO se debe hacer de la manera en que se está probando en el servidor ... utilice un ajax y un setTimeout o similar en el navegador en su lugar .. –