Búfer de salida en PHP
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.
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 :)
.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
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)
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


