Foros del Web » Programando para Internet » PHP »

fórmula para calcular tiempo envío e-mails

Estas en el tema de fórmula para calcular tiempo envío e-mails en el foro de PHP en Foros del Web. Hola, Estoy haciendo un script para hacer envíos de correo más o menos masivo. El envío se hace por paquetes de 10 correos (por ejemplo), ...
  #1 (permalink)  
Antiguo 18/08/2011, 19:41
 
Fecha de Ingreso: junio-2010
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
fórmula para calcular tiempo envío e-mails

Hola,
Estoy haciendo un script para hacer envíos de correo más o menos masivo. El envío se hace por paquetes de 10 correos (por ejemplo), y a la vez, entre envío y envío dejo pasar unos segundos, mediante la función sleep().

Quiero imprimir en pantalla, el tiempo que se tardará en completar el envío.
No sé cual es la operación matemática que debiera utilizar para hacer este cálculo, puesto que utilizando el siguiente código no me funciona:

// variables
$mails=112; // número de direcciones a las que se enviará el correo, se extrae de la bd
$segundos=20; // tiempo para la función sleep(), entre envío de paquetes
$cant=10" // cantidad de emails por paquete

// fórmula para calcular tiempo de envío
$tiempo=($mails/$cant)*$segundos;
echo $tiempo;

La fórmula para calcular sé que no es correcta.
Con esta fórmula estoy multiplicando el número de paquetes por el tiempo entre un envío y otro. Pero, el número de ciclos de sleep siempre es uno menos que e número de paquetes, ya que cuando se ha enviado el último paquete de mails, sleep ya no se ejecuta.

Sería una serie así:
Envío paquete 1 -> sleep -> envío paquete 2 -> sleep -> .... -> envío último paquete

He probado restando 1 (-1) al resultado de dividir $mails y $cant pero tampoco resulta. El problema es cuando la división da un resultado con decimales. Si el resultado es un entero, y le resto 1, entonces si funciona correctamente.
Cuál sería la fórmula correcta?

// segunda formula
$tiempo=(($mails/$cant)-1)*$segundos;

Soy bastante nobato en PHP y además de letras. No me lo tengáis en cuenta. Gracias por vuestra ayuda.
Saludos.

Última edición por xblanch; 18/08/2011 a las 19:46
  #2 (permalink)  
Antiguo 19/08/2011, 03:30
 
Fecha de Ingreso: diciembre-2009
Mensajes: 92
Antigüedad: 14 años, 4 meses
Puntos: 13
Respuesta: fórmula para calcular tiempo envío e-mails

Si te sobra un sleep del final le restas.

$tiempo=((($mails/$cant)*$segundos)-$segundos);


Pero el envío de los paquetes es instantáneo?

No tengo experiencia en envíos de mails, pero me parece que sería:
(Tiempo de envió de paquete 1) -> (tiempo de sleep) -> (tiempo envío paquete 2)...
y ahora estas haciendo:
(Tiempo de envio de paquete 1 = 0seg) -> (tiempo de sleep = 20seg) -> (tiempo envío paquete 2 = 0seg)...

PD: Antes de que me preguntes, no se como se calcula el tiempo que se tarda en enviar un paquete xD

Saludos.
  #3 (permalink)  
Antiguo 19/08/2011, 08:39
 
Fecha de Ingreso: junio-2010
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: fórmula para calcular tiempo envío e-mails

Cita:
Iniciado por netkuup Ver Mensaje
Si te sobra un sleep del final le restas.

$tiempo=((($mails/$cant)*$segundos)-$segundos);


Pero el envío de los paquetes es instantáneo?

No tengo experiencia en envíos de mails, pero me parece que sería:
(Tiempo de envió de paquete 1) -> (tiempo de sleep) -> (tiempo envío paquete 2)...
y ahora estas haciendo:
(Tiempo de envio de paquete 1 = 0seg) -> (tiempo de sleep = 20seg) -> (tiempo envío paquete 2 = 0seg)...

PD: Antes de que me preguntes, no se como se calcula el tiempo que se tarda en enviar un paquete xD

Saludos.


Hola,
Antetodo gracias por la respuesta.

El envío es prácticamente instantáneo, a penas unas décimas de segundo (lo que tarda el servidor en procesar las instrucciones), bastante imperceptible, con lo que tampoco es mi intención calcular este tiempo exactamente.
Con la fórmula que me propones de restar uno, el resultado no es del todo correcto cuando hay decimales en el resultado de la división, va bien si el resultado es un entero. Cuando hay un decimal, al multiplicar me devuelve la parte proporcional del tiempo de sleep, y los ciclos de sleep son todos completos.

Por ejemplo: vamos a enviar 10 correos, en paquetes de 3, cada 5 segundos.
$mails=10;
$segundos=5;
$cant=3;

$tiempo=(((10/3)*5)-5);
da como resultado $tiempo= (3,3*5)-5)
que a su vez es $tiempo=16,5-5 que da $tiempo=11,5 segundos

11,5 son dos ciclos de sleep (5 segundos cada uno), + 1,5 más, que es la parte proporcional del último paquete enviado (que solo es de un e-mail). En este ejemplo solo ha habido dos ciclos de sleep en realidad.

Se me ocurre que quizás pueda evaluar si el resltado es un entero (si lo es restarle un ciclo de sleep), y si no lo es, convertirlo a entero. Hay la función intval() para convertir a entero, pero no he encontrado ninguna para evaluar si $tiempo es entero o decimal.
ALguna sugerencia?
probablemente ésta no sea la forma más limpia de hacerlo, pero bueno.
Espero haberme explicado bien.
Gracias.
  #4 (permalink)  
Antiguo 19/08/2011, 09:23
 
Fecha de Ingreso: diciembre-2009
Mensajes: 92
Antigüedad: 14 años, 4 meses
Puntos: 13
Respuesta: fórmula para calcular tiempo envío e-mails

Perdón, me confundí en mi anterior respuesta.

Si hay:

$mails=10;
$segundos=5;
$cant=3;

Hay 4 paquetes y por lo tanto 3 sleeps = 15 segundos.

(paquete de tres) (5 seg) (paquete de tres) (5 seg) (paquete de tres) (5 seg) (paquete de uno)

Si el numero de paquetes es entero hacemos ((paquetes - 1) * segundos )

Si el numero de paquetes no es entero, cogemos el siguiente numero entero, Ej: si tenemos 3,2 cogemos el 4.

He echo el código en php:

Código PHP:
<?

$mails
=10;
$segundos=5;
$cant=3;

$paquetes=($mails/$cant);

if(
is_float ($paquetes)){ 
//Si es decimal cogerá el siguiente numero entero (Ej: si es '3.3' cojerá '4')
  
$partes explode(".",$paquetes);
  
$paquetes = ($partes[0] + 1);


$tiempo = ($paquetes 1)*$segundos;

echo 
$tiempo
 
?>
  #5 (permalink)  
Antiguo 19/08/2011, 11:27
 
Fecha de Ingreso: junio-2010
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: fórmula para calcular tiempo envío e-mails

Muchas gracias. Funciona perfectamente.

Etiquetas: e-mails, variables, calculadora
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 17:55.