Foros del Web » Programando para Internet » PHP »

Pausa dentro de bucle en función mailing

Estas en el tema de Pausa dentro de bucle en función mailing en el foro de PHP en Foros del Web. Hay algun metodo para que pueda forzar una pausa de x tiempo dentro de un bulce? Saludos...
  #1 (permalink)  
Antiguo 11/10/2005, 11:52
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Pausa dentro de bucle en función mailing

Hay algun metodo para que pueda forzar una pausa de x tiempo dentro de un bulce?

Saludos

Última edición por tralara; 12/10/2005 a las 09:05
  #2 (permalink)  
Antiguo 11/10/2005, 12:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
sleep()
www.php.net/sleep

Pero tienes que tener presente que PHP otorga un tiempo de ejecución a cada script (30 segundos por defecto) .. así que si tus "sleeps's" van a superar ese tiempo .. vas a tener que aumentar el tiempo de ejecución para tus scripts con: set_time_limit()

PD: .. no sé si estás desarrollando una aplicación PHP bajo "PHP-GTK o CLI" pero parece que no .. que estás haciendo una aplicación "web" (PHP bajo un servidor HTTP) si es así .. Deberías explicar que pretendes hacer .. para orientarte al respecto (lo digo por otra pregunta tuya: http://www.forosdelweb.com/f18/bucle-comparando-segundos-340777/)

Un saludo,
  #3 (permalink)  
Antiguo 11/10/2005, 12:18
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Si, realmente tiene que ver con la otra pregunta en el sentido que están relacionados con el mismo script aunque este post concretamente está al margen del otro. Te cuento:

Estoy preparando un script con para realizar un mailing, ya tengo el cron preparado para que vaya llamando al script, pero, como tengo dominios de los cuales tengo unas 1000 direcciones, quiero comprobar a que hora se ha enviado el utlimo correo a un dominio concreto y dejar o no enviar el siguiente mail al mismo server, mas que nada para evitar que sea considerado spam.

Entonces como he comprobado que a veces la classe que uso para enviar los mails depende de lo saturado que vaya el server tarda mas o menos segundos en enviar el correo, incluso en procesarse el script hay pequeñas variaciones de tiempo quería darle un tiempo adicional "de seguridad" para que realmente no empiece a colgarse el envío.

Es bueno el enfoque?
  #4 (permalink)  
Antiguo 11/10/2005, 12:20
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
y el tiempo que le asigno a sleep() se suma al de set_time_limit()?
  #5 (permalink)  
Antiguo 11/10/2005, 12:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No .. "set" define el tiempo máximo que le vas a dar de ejecución a tu script .. por ende si tienes un bucle que da N pasadas y ahí tienes un "sleep()" a X segundos .. multiplica y sabras minimo el tiempo que tienes que darle a tu script para que se ejecute sin que te salte un error de PHP referente a ese tiempo de ejecución sobrepasado.

Un saludo,
  #6 (permalink)  
Antiguo 11/10/2005, 12:33
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Entiendo, y set_time_limit() lo indico al principio del script, no?

Saludos y garcias
  #7 (permalink)  
Antiguo 11/10/2005, 12:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por tralara
Si, realmente tiene que ver con la otra pregunta en el sentido que están relacionados con el mismo script aunque este post concretamente está al margen del otro. Te cuento:

Estoy preparando un script con para realizar un mailing, ya tengo el cron preparado para que vaya llamando al script, pero, como tengo dominios de los cuales tengo unas 1000 direcciones, quiero comprobar a que hora se ha enviado el utlimo correo a un dominio concreto y dejar o no enviar el siguiente mail al mismo server, mas que nada para evitar que sea considerado spam.

Entonces como he comprobado que a veces la classe que uso para enviar los mails depende de lo saturado que vaya el server tarda mas o menos segundos en enviar el correo, incluso en procesarse el script hay pequeñas variaciones de tiempo quería darle un tiempo adicional "de seguridad" para que realmente no empiece a colgarse el envío.

Es bueno el enfoque?
mm .. En mi caso para solventar el problema del registro de la actividad de envio de los e-mails lo hago sobre una Base de datos (podría ser un archivo de texto plano) por lo menos para el registro del estado "enviado" o "en proceso de envio".. le doy tiempo de ejecución "tarde lo que tarde" (set_time_limit(0)) al script.

El script de proceso de envio de los e-mails .. lo dejo corriendo pese terminar la conexión del script con:

register_shutdown_function()

Y sólo me dedico a ver el estado de esa BD o archivo de texto plano que es donde voy recogiendo la actividad del script que tengo corriendo en "segundo plano".

Este caso es útil cuando uno "lanza" el proceso manualmente, no corres el peligro de que cierres la "ventana" donde estás enviando tus e-mails (hablo de lanzarlo vía llamada HTTP). En tu caso al usar un cron-job esto no es tan importante .. no obstante es bueno conocer este tipo de funciones.

No he usado cron-job para lanzar otro proceso (en este caso) .. pero usando lo que te propongo .. tu script que lanzas en el cron-job debería ir a consultar a tu BD por si terminó el proceso en curso (ahí gestionas flag's de estado de tus envios ... o almacenas fechas) .. Eso sí, tu cron-job tendrías que definirlo a intervalos .. si ahora no se ejecutó por estar un proceso en curso (conocido previa consulta a tu BD o archivo de texto plano que defina en que fase va del envio) .. lo hará en la próxima ejecución de tu cron-job.

En resumen .. no retardo la ejecución del script sino que dejaría en manos del cron-job la ejecución de los intervalos y gestionar sobre todo "flag's" (banderas, estados) para saber si está en curso un envio o no de esos e-mails.

Puedes "paginar" tus envios para enviar en tandas de N e-mails por tiempo ... (creo que algunos scripts de gestión de listas de correo lo hacen así ya).

Un saludo,
  #8 (permalink)  
Antiguo 11/10/2005, 12:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por tralara
Entiendo, y set_time_limit() lo indico al principio del script, no?

Saludos y garcias
Si, al principio del script .. eso ajusta dicho valor sólo para ese script (en su tiempo de ejecución).

Un saludo,
  #9 (permalink)  
Antiguo 11/10/2005, 13:14
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Esto que cuentas es muy interesante, pero mucho mucho, register_shutdown_function(), aunque como dices creo que en mi caso no es necesario, pero puede ser muy util en otros casos, por ejemplo manejando grandes bases de datos, no?

Bueno, mi sistema lo tengo montado con base de datos para tener "todo" controlado.
Mas o menos así.

0-Se ejecuta el cron(cada cinco minutos) y me llama al script.
1-El script selecciona de la base el primer mail que no se haya enviado.
2-Detecta su dominio y consulta a la base de dominios a que hora se envió el ultimo mail a ese mismo dominio.
3-Si hace menos de 5 minutos pasa al siguiente mail si sobrepasa los 5 minutos lo envía.
4-Guardo la hora del envio en respectivas bases y el log que me de la clase de mail en si.

Si hay 600 dominios distintos que realmente es lo que me marca los tiempos, nunca enviará mas de 600 mails en una ejecución.

Entonces, el script no lo lanzo vía navegador, lo ejecuta el cron y yo lo unico que tengo que hacer es mirar mi sistema de logs.

Lo que mas me preocupaba es el tema del spam, por eso decidí no enviar mas de un correo al mismo server en un intervalo de tiempo menor a cinco minutos, aunque tampoc se si es exagerado, y por otro lado luego he pensado, claro si se va a tirar unos 15 dias mas o menos, hay algunas horas que el server esta un poco mas lento y puede que el script se pare por error. Entonces la pregunta viendo estos tiempos para el envío teniendo en cuenta que solo son 600 la primera vez, luego irán bajando puesto que hay dominios que solo hay una dirección claro, puede ser problematico enviar 600 mails en un intervalo de 5 minutos?
  #10 (permalink)  
Antiguo 12/10/2005, 06:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Bueno .. el tema del spam deberías verlo bien .. por qué más que sea bloqueado cierto servidor SMTP receptor de tu e-mail (en ese dominio) .. más bien será tu própio servidor SMTP (el de tu proveedor) el que te bloquee por enviar "rafagas" de N máils continuos o alguna quota de evio de e-mails por tiempo (horas/días/ o minutos?) como suelen hacer.

Si dices tener 600 mails que enviar y demoras 5 minutos entre uno y otro .. puedes estar (si no me falla la calculadora) "2 días" enviando e-mails (y no son muchos los que tu envias .. piensa que algunos mailings se envian miles!!!)

Un saludo,

Un saludo,
  #11 (permalink)  
Antiguo 12/10/2005, 06:50
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
O sea que tal como lo planteo no debería dar problemas no?
  #12 (permalink)  
Antiguo 12/10/2005, 08:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En principio no ..

Un saludo,
  #13 (permalink)  
Antiguo 12/10/2005, 09:04
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Ok Cluster gracias por tu ayuda!!
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:49.