Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/10/2010, 08:10
Remsankar
 
Fecha de Ingreso: octubre-2003
Ubicación: Cerca de una wifi o 3G
Mensajes: 328
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Como funciona ob flush?

Hola se que este es un tema antiguo, pero aparece de los primeros en google ob_flush() pero el ejemplo que dan mas arriba no funciona, por lo menos en la mayoría de los servidores, agrego mas información adicional y otros datos útiles.

Si el ejemplo de arriba no funciona puedes ocupar esto cuando quieres que se envie el texto

flush();
ob_flush();

lo que hacen estas dos funciones es obligar al servidor a que envié la información que esta en el buffer, el buffer es un espacio en la memoria del servidor que se va llenando con la información que se enviara a un cliente o usuario, solo se envia cuando el bufefr se llena (creo que lo general es que sean 4096 b)

En una pagina normal eso esta bien, pero pro ejemplo si tienes un script pesado que procesa fotografias grandes o que crea zip o algo que toma tiempo supongamos algo que toma 5 minutos o una simple tabla con muchos datos que queires que se vaya viendo a medida que se va procesando, bueno como solo se envia la informacion a medida que se lelna el buffer existen ese grupo de funciones que obligan al servidor a ir enviando lo que genera tu archivo php a medida que va avanzando en su ejecución.

En firefox esto siempre funciona bien, pero en IE hay una excepcion, IE tiene un cache interno que una vez que esta cargada la pagina formatea el contenido, uno de los casos comunes son las tablas, aunque ocupes
flush();
ob_flush();
El propio cache de IE solo mostrara la tabla cuando reciba el cierre de la misma, a diferencia de Firefox y los otros que van mostrando sin necesidad de cerrar la tabla, la solucion es no ocupar tablas en esos casos con CSS creo que no hay problema aunque posiblemente algunos codigos tambien podrian presentar ese error. otra singularidad es que aveces primero hay que enviar cierto numero de bytes 256 o 516 dependiendo de la version de IE, todo eso para que lo tomes en cuenta a la hora de corregir bugs.

Tambien ley por ahi aunque no me ha pasado que hay firewalls o antivirus o ciertas versiones de servidores web que tambien limitan la salida del buffer y esto se puede resolver en algunos casos llamando esta funcion

function flush_buffers(){
ob_end_flush();
ob_flush();
flush();
ob_start();
}

Hay otras excepciones cuando trabajas con headers, por que los headers se envian al principio, generalmente antes que se ejecute el script, de todas maneras hay formas para corregir esos problemas aunque quizas alguno de esos problemas se corrigen modificando en php.ini y aveces no se puede hacer eso si usamos un hosting, especulo pro que no recuerdo cuando me paso ni con que software o web, si me acuerdo de un error que nos tomo tiempo de reparar y era un espacio antes de <?PHP o un un espacio al final del ?> aveces eso es mejor revisarlo con un editor hexadecimal, pero bueno eso ya es otro tema


Dejo dos ejemplos adicionales

Código PHP:
<?php
//la version que yo ocupo
//ob_start(); // yo ponia ob_start() al principio del script pero despues me di cuenta 
//que no era necesaria, creo que depende del servior web, pero en php.net esta bien explicado
echo "Ejemplo 2 :)</br>";
flush();
ob_flush();
Sleep(2);
echo 
"Ya pasaron dos 2 segundos</br>";
flush();
ob_flush();
Sleep(2);
echo 
"y otros dos mas... 4</br>";
flush();
ob_flush();
Sleep(2);
echo 
"y otros dos mas... 6</br>";
?>


Código PHP:
<?php
//version si todo lo demas falla
function flush_buffers(){
    
ob_end_flush();
    
ob_flush();
    
flush();
    
ob_start();


echo 
"Ejemplo 3 - :)</br>";
flush_buffers();
Sleep(2);
echo 
"Ya pasaron 2 segundos</br>";
flush_buffers();
Sleep(2);
echo 
"Y dos mas... 4 segundos</br>";
flush_buffers();
Sleep(2);
echo 
"OK eso seria todo... 6 segundos así ves que funciona y que no</br>";
?>
__________________
Ayuda!! firmar y compartir
No a la privatizacion de semillas http://www.thepetitionsite.com/1/no-...n-de-semillas/
Mas info: http://chilesintransgenicos.cl/