Búfer de salida en PHP

21.dic 2006 Envía un trackback

Intentando programar un pequeño php que, usando phpmailer, mande correos a una lista de destinatarios con cierta información irrelevante me surgió un pequeño problema que paso a describir. Durante el envío debía comprobar por pantalla y uno a uno los correos erróneos o incapaces de entregarse sacando un informe del motivo.

El esquema empezó siendo algo sencillo, esperando un segundo entre envío y envío para no recargar el servidor de correos, algo así como:


for($i=0;$i<=$cuenta;$i++)
{
        $err=mail($remitente,$asunto,$contenido,$destinatario[$i]);
        if($err)
                echo "Ha ocurrido un error con {$destinatario[$i]}";
        else
                echo "Correo enviado satisfactoriamente a {$destinatario[$i]}";
        sleep(1);
}
 
La idea era buena y en una lista de destinatarios que no supere los 3 items, despistándonos un poco, podría valer. Pero si se pretende enviar masivamente clientes, pos va' ser que no. Pensé que la información se iría mostrando poco a poco en pantalla y estaba equivocado, en una lista de 10 destinatarios los registros de errores y no_errores se muestran después de 10 segundos (más el tiempo suplementario en mandar el correo), de golpe y porrazo. La solución está en las funciones flush() y ob_flush() que, hasta hace poco, desconocía:
if($err)
        echo "Ha ocurrido un error enviando correo a $destinatario[$i]";
else
        echo "Correo enviado satisfactoriamente a $destinatario[$i]";
flush();
sleep(1);
 
flush() se encarga de vaciar el buffer de salida de PHP, mostrando uno a uno cada mensaje. Un efecto parecido a lo que se haría con Ajax o Javascript Avanzado pero con una simple función PHP, creo que jugando un poco más con esta función se pueden hacer cosillas 2.0... o no :D.
flush ob_flush bufer

Comentarios
Gravatar reidrac@21.12.2006, 'Re: Búfer de salida en PHP'

Precisamente eso me pasó en una anuncio que mandé a los preinscritos antes de nuestras últimas jornadas...

Bueno, eso y que no puse saltos de linea tras los "echo". Claro, con una linea tan inmensa al navegador le dio un yu-yu y me quedé sin saber si los correos habían salido :P

Buen tip :)

Gravatar flexo@22.12.2006, 'Re: Búfer de salida en PHP'

.buenos deseos para el año bond...2 0 0 7

...todos los buenos deseos que empiecen por a,b,c,ch,d,e,f,g,h,i,j,k,l,ll,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z

Gravatar coder@08.04.2007, 'Re: Búfer de salida en PHP'

Leo este post ahora, no sé por qué xD

http://www.fluzo.org/blog/post/Nociones-sobre-el-%3Ci%3Eoutput-buffering%3C/i%3E-de-PHP-(4%20y%205)

Gravatar carlos ceron@26.06.2008, 'Re: Búfer de salida en PHP'

Hice la misma prueba pero no me funciona ...alguien sabe qu'e debo hacer? habilitar algo en el php.ini o llamar a alguna otra funcion?

gracias

carceron@hotmail.com


Escribe tu comentario
 
 
Guardar datos
Escribe tu comentario:
captcha


Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles: [url=http://direccion]texto[/url], negrita: [b]texto[/b], itálica: [i]texto[/i], subrayada: [u]texto[/u]. Para mencionar o citar a alguien (quote): [cita]texto[/cita]