versiones tutorial sirve que programacion para lenguaje historia descargar code caracteristicas php

sirve - php tutorial



Echo ''string'' mientras que cada iteraciĆ³n de bucle largo(flush() no funciona) (7)

Tengo un bucle que tarda mucho en ejecutarse, y quiero que la secuencia de comandos muestre algo cada vez que se realiza la iteración del bucle.

echo "Hello!"; flush(); for($i = 0; $i < 10; $i ++) { echo $i; //5-10 sec execution time flush(); }

Esto no muestra los ecos hasta que se complete el script completo. ¿Qué salió mal?


Agregue esto en el encabezado de la secuencia de comandos:

ob_start(); ob_implicit_flush();

La descarga implícita resultará en una operación de descarga después de cada llamada de salida, por lo que ya no serán necesarias las llamadas explícitas a flush (). Tenga en cuenta que agregar un vaciado implícito en la ejecución del script afecta el rendimiento . Puedes agregar un modo de depuración para tu script como:

ob_start(); define(DEBUG, 1); if(DEBUG){ ob_implicit_flush(); }


Asegúrate primero de hacer:

@ini_set(''zlib.output_compression'', 0); @ini_set(''implicit_flush'', 1); @ob_end_clean();

y luego simplemente flush(); Cada vez que necesite enviar sus ecos al navegador.


Del manual de PHP:

Es posible que flush () no pueda anular el esquema de almacenamiento en búfer de su servidor web y no tiene efecto en ningún búfer del lado del cliente en el navegador. Tampoco afecta el mecanismo de búfer de salida del espacio de usuario de PHP. Esto significa que tendrá que llamar tanto a ob_flush () como a flush () para vaciar los buffers de salida ob si los está usando.

echo "Hello!"; flush(); ob_flush(); for($i = 0; $i < 10; $i ++) { echo $i; //5-10 sec execution time flush(); ob_flush(); }

-o-- puede vaciar y desactivar el almacenamiento en búfer

<?php //Flush (send) the output buffer and turn off output buffering while (ob_get_level() > 0) ob_end_flush(); echo "Hello!"; for($i = 0; $i < 10; $i ++) { echo $i . "/r/n"; } ?>


En general, el comportamiento deseado no es posible es una forma determinista / estable utilizando PHP y HTML puros.

Si y cómo un navegador presenta una página parcial depende del navegador, los servidores proxy y los cachés. Por lo tanto, incluso si las cosas funcionan en su máquina de prueba, es probable que no en su sistema de producción.

La biblioteca xAjax proporciona una solución bien integrada para administrar las actualizaciones de estilo AJAX con PHP . Si bien xAjax podría estar muerto como proyecto (al menos en este momento), todavía funciona bien.


También asegúrese de generar primero un encabezado de tipo de contenido. Flushing no funciona para mí sin:

header( ''Content-type: text/html; charset=utf-8'' ); for($i=0; $i<10; ++$i) { echo "Loop<br />/n"; ob_flush(); flush(); sleep(1); }


También puede intentar usar ob_flush (), a veces se necesitan ambos para trabajar.


prueba esto

while (@ob_end_flush()); ob_implicit_flush(true); echo "first line visible to the browser"; echo str_pad("",1024," "); echo "<br />"; sleep(5); echo "second line visible to the browser after 5 secs";

Solo tenga en cuenta que de esta manera realmente está deshabilitando el búfer de salida para su script actual. Entonces, si intentas ''ob_end_flush ()'' después de eso, obtendrás una advertencia de que no hay ningún búfer para cerrar.