Foros del Web » Programando para Internet » PHP »

Progreso de tarea con PHP posible?

Estas en el tema de Progreso de tarea con PHP posible? en el foro de PHP en Foros del Web. Amigos, les cuento, implementé un sistema de mailing masivo con PHP Mailer en modo SMTP que saca los correos de una base de datos donde ...
  #1 (permalink)  
Antiguo 23/12/2011, 01:20
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Progreso de tarea con PHP posible?

Amigos, les cuento, implementé un sistema de mailing masivo con PHP Mailer en modo SMTP que saca los correos de una base de datos donde desde un formulario se llenan los datos del mail a enviar como asunto, mensaje, etc. La idea de este sistema es que el cliente pudiera saber el progreso del envío masivo de la forma: X enviados de Y, donde Y es el total.
La única forma que se me ocurrió para poder saber el progreso de los mails enviados es obtener con ajax desde el cliente la lista de mails, recibirla en javascript en el cliente, y empezar a hacer tantas peticiones como correos hayan en la base de datos para poder enviar mails de a 1 y poder saber el progreso, el problema es que se debe hacer 1 consulta para enviar 1 correo en un ciclo for, lo cuál no me parece buena idea, el principal motivo es que el servidor me podría banear por pensar que el cliente está haciendo un ataque DoS (denegación de servicio) por hacer tantos request tan seguidos.

Busqué si había alguna forma de que al enviar el formulario se enviaran los datos del mail como asunto y mensaje al servidor y que el mismo servidor obtenga la lista y se los envíe a todos sin tener que andar haciendo X peticiones por cada envío, de modo que el script PHP vaya informando al cliente el progreso.

Es posible hacerlo de alguna forma?

PDTA: Envié a 570 usuarios un mailing con el método que ya tengo implementado (se hicieron 570 peticiones), y todo funcionó bien en poco tiempo. Si bien el server no me baneó, quizás si hubieran sido 1000 o 2000 los correos si hubiera pasado.

Eso, alguna idea?. Saludos!

Última edición por de-troit; 23/12/2011 a las 01:37
  #2 (permalink)  
Antiguo 23/12/2011, 02:46
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 7 meses
Puntos: 326
Respuesta: Progreso de tarea con PHP posible?

¿Miraste de usas phplists? Se encarga de todo eso por ti.. xD

De todas formas, sino, simplemente con guardar en alguna tabla los "correos enviados" "a quien", y quizás un id de la tarea actual....

La cosa sería
Lanzas en 2ndo plano el "mailing masivo" (para q el cliente no tenga q estar esperando a q se cargue la pag)
Lo redirijes a una página, donde por ajax, cada 30 segs, recargue un div con la info del número de enviados

Algo así, más o menos, deberia valerte, no?
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 23/12/2011, 05:28
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Progreso de tarea con PHP posible?

En mi caso no fué necesario usar PHPLists porque la gente no se suscribía, sólo necesitaba una tabla de datos con los correos de algunas personas.

Lo que dices sobre mandar a una tabla los mails a los que ya se les haya enviado el mail y desde el cliente comprobar cada 30 segundos no es la idea, ya que el progreso no sería en tiempo real y no mostraría un progreso real, en cambio al hacerlo como lo hago haciendo (x = cantidad de registros) peticiones vía AJAX el progreso es real.

Es bueno lo de saber sobre PHPLists.

Se te ocurre alguna otra solución? Quiero hacer algo parecido a una barra de progreso cuando se suben archivos a un servidor pero que en vez de eso muestre el progreso del envío de mailings.
  #4 (permalink)  
Antiguo 23/12/2011, 05:33
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 7 meses
Puntos: 326
Respuesta: Progreso de tarea con PHP posible?

Sólo se me ocurre lo mismo... pero con COMET. Lo cual el progreso sería 1:1. 100% real.

Si no sabes q es comet vendría a ser... pues, que cada vez que envias un mail "notificas" al navegador que lo has enviado.

De todas formas, veo más sencillo ajax. Si en vez de 30 segs, lo lanzas cada vez que te devuelve el resultado, obtienes casi casi un 1:1. Quizás se han enviado 30 más... pero, si envias 500 correos, ¿Q es? ¿Un 8%? va dando saltitos cortos, supongo.......

Es lo único que se me ocurre...

O eso, o un "iframe" en la página, con el resultado de un php que vaya mostrando la cola, con flush() ( http://es.php.net/flush ) para ir mostrando el buffer de salida... y ya ahí, con js o algo para que actualize el loader.

No sé, cosas así supongo :S
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 23/12/2011, 05:46
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Progreso de tarea con PHP posible?

No conozco ninguna de las 2 técnicas pero voy a averiguar.

Comet mantiene una conexión persistente con el cliente para enviarle datos sin necesidad de que este haga un request? Eso pasé a leer. Voy a averiguar. Qué más sabes sobre esta técnica?
  #6 (permalink)  
Antiguo 23/12/2011, 06:09
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 7 meses
Puntos: 326
Respuesta: Progreso de tarea con PHP posible?

Sólo algo q leí "de pasada".

Por lo q entendi, era... q el cliente "siempre" esperaba una respuesta, y el servidor se la mandaba cuando estaba lista.

O algo así. Un día de estos tengo q trastear con Comet xD
__________________
>> Eleazan's Source
>> @Eleazan
  #7 (permalink)  
Antiguo 23/12/2011, 16:59
de-troit
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Progreso de tarea con PHP posible?

Muchas gracias, no sé si pensar si estás siendo irónico o no hahaha, pero la verdad es que lo leí de pasada porque justo ahora estoy sin tiempo para averiguar harto, solo quiero informarme de las posibilidades para después averiguar y mejorar el sistema que programé.

Espero más ideas. Saludos!

Etiquetas: formulario, progreso, tarea, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:45.