Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/10/2007, 02:08
zaqpz
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Re: Mostrar resultados a medida que se ejecuta consulta a BD

El tema de ir enviando salida al navegador a medida que esta se genera es algo complicado. La cuestión es que en el envio de estas salidas intervienen los servidores y navegadores, y cada uno hace cosas diferentes con ella. Como puedes ver en http://ar2.php.net/flush y también en los comentarios de esa misma documentación, existen varias "soluciones" al problema... algunas les funcionan a algunos mientras que esas mismas soluciones no les funcionan a otros tantos.
Lo que yo he utilizado en cierta ocasión y hasta ahora no me ha dado problemas es algo como lo siguiente:

Código PHP:
<?php
ob_start
();

for(
$i=0$i<=4$i++)
{
    echo 
$i.'<br>';
    
enviarSalida();
    
sleep(1);
}

function 
enviarSalida()
{
    if(
ob_get_length()<=8192) echo str_pad(''8192-ob_get_length());
    
ob_flush();
}
?>
El problema es que para que la salida sea realmente mostrada en el momento requerido si lo que hay que mostrar tiene una longitud menor a 8192 caracteres se utiliza un relleno para llegar a esta cantidad, aunque este relleno no se muestre en lo que ve el "usuario final". Lo ideal sería entonces que llames a enviarSalida() cada 4 o 5 registros para no tener que enviar tanto relleno innecesario.

Como te digo, hay varios factores que intervienen en el proceso y cada uno de ellos se comporta de manera distinta; esta es la forma que encontré yo que funciona en Win/Linux y en Opera/Firefox/IE. Puedes ver más en el link que te pasé más arriba.

Saludos.
__________________
R4DS en español | R4DS en inglés

Última edición por zaqpz; 05/10/2007 a las 02:13