¿Cómo vaciar la salida después de cada llamada de "eco"?

Resuelto cusspvz asked hace 54 años • 21 respuestas

Tengo un script php que solo produce registros para el cliente.
Cuando hago eco de algo, quiero que se transfiera al cliente sobre la marcha.
(Porque mientras se procesa el script, la página está en blanco)
Ya había jugado con ob_start()y ob_flush(), pero no funcionaron.

¿Cuál es la mejor solución?

PD: está un poco sucio poner color al final de la echollamada...

EDITAR: Ninguna de las respuestas funcionó, ¿PHP o Apache Fault?

cusspvz avatar Jan 01 '70 08:01 cusspvz
Aceptado

Tuve el mismo problema y uno de los ejemplos publicados en el manual funcionó. Se debe especificar un conjunto de caracteres como uno de los carteles aquí ya mencionados. http://www.php.net/manual/en/function.ob-flush.php#109314

header( 'Content-type: text/html; charset=utf-8' );
echo 'Begin ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
    echo $i . '<br />';
    ob_flush();
    flush();
    sleep(1);
}
echo 'End ...<br />';
Teno avatar Oct 05 '2012 06:10 Teno

Editar:

Estaba leyendo los comentarios en la página del manual y encontré un error que indica que ob_implicit_flush no funciona y la siguiente es una solución alternativa:

ob_end_flush();

# CODE THAT NEEDS IMMEDIATE FLUSHING

ob_start();

Si esto no funciona, entonces lo que puede estar sucediendo es que el cliente no recibe el paquete del servidor hasta que el servidor haya acumulado suficientes caracteres para enviar lo que considera un paquete que vale la pena enviar.


Antigua respuesta:

Podrías usar ob_implicit_flushel cual le indicará al buffer de salida que lo desactive por un tiempo:

ob_implicit_flush(true);

# CODE THAT NEEDS IMMEDIATE FLUSHING

ob_implicit_flush(false);
amphetamachine avatar Jun 28 '2010 14:06 amphetamachine