Foros del Web » Programando para Internet » PHP »

Problemas con tiempo del insert en mysql

Estas en el tema de Problemas con tiempo del insert en mysql en el foro de PHP en Foros del Web. Que tal a todos, bueno, mi problema es el siguiente: Estoy haciendo un envio masivo de correos con la clase phpmailer, la cual me funciona ...
  #1 (permalink)  
Antiguo 11/10/2006, 08:48
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 17 años, 7 meses
Puntos: 0
Problemas con tiempo del insert en mysql

Que tal a todos, bueno, mi problema es el siguiente: Estoy haciendo un envio masivo de correos con la clase phpmailer, la cual me funciona a la perfeccion, me envia los correos rapdiamente y todo, pero mi problema es que yo tengo que tener una especie de reporte para saber cuales correos ya han sido enviados, debido a que hago un while para enviar los correos uno por uno y luego de que han sido enviados, el php me guarda en una tabla el id del correo que se envio, para poder saber cuales y cuantos han sido enviados hasta ese momento.

Ahora bien, no se porque, aun no encuentro nada que me solucione mi problema, cuando estoy haciendo esto php me envia aproximadamente 8,000 correos (segun mi tabla en donde guardo los correos enviados), pero al terminar estos 8,000 el proceso en mysql se muere, y deja entonces de guardar registros en mi tabla, y tengo que parar el script de php y volver a ejecutarlo para q me siga enviando los que faltan, lo cual se vuelve demasiado tedioso ya que no me los envia todos de una sola vez.

Alguien me podria decir a que se debe esto???, es php o es mysql???, tengo que configurar algo o agregar algo al scrip de php????. De antemano muchas gracias por su ayuda...
  #2 (permalink)  
Antiguo 11/10/2006, 17:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Realmente describistes el problema, OK . . pero ahora faltan "antecedentes" del mismo. El código que usas, la estructura de tus tablas de tu BBDD .. en fin, algún dato que nos haga "disparar" otra pregunta para que verifiques o pruebes algo más.

Por ejemplo .. supongo que si ya envias unos 8000 e-mails o más, no tendrás problemas con el tiempo de ejecución de tu script PHP (que PHP lo limita por configuración salvo que tu lo aumentes por otros médios). Ese podría ser un problema.

Hay otros factores que podrían hacer "parar" la ejecución de un script de largo proceso, por ejemplo .. tu servidor HTTP (Apache? .. cual usas?) puede imponer tiempos de espera máximo para obtener una respuesta del cliente o enviarla al mismo ... En definitiva, la mayoría de problemas de este estilo vienen dados por el "tiempo de ejecución".

En otros casos, podría ser que la definición del campo de tu BBDD (autonumérico?) que registra algún identificador del e-mail enviado se esté quedando corto por tipo de dato ...

En fin .. todo son "suposiciones" .. hay muchos sitios donde deberías ir "descartando". Lo más simple para -nosotros- que pretendemos ayudarte y que no estamos delante de la configuración de ese servidor y en tus condiciones de pruebas es que pongas el código que usas para ir descartando problemas por ese lado .. lo cual no asegura una solución a tu problema.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/10/2006, 08:38
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 17 años, 7 meses
Puntos: 0
ok, aqui pongo mi codigo y las tablas, como les digo, no pienso que sea php, pienso que talvez son algunas configuraciones del servidor (uso Apache), o algo de las BD, la verdad no se que podra ser, nunca me habia enfrentado con esto....

CODIGO PHP:
<?PHP
require("includes/class.phpmailer.php");
$mail = new PHPMailer();
$mail->PluginDir = "includes/";

$mail->From = $_POST['remitente'];;
$mail->Subject = $_POST['asunto'];
$mail->FromName = $_POST['nombre'];
$mail->Host = "servidorsmtp";
$mail->Mailer = "smtp";
$mail->IsSMTP();
$mail->IsHTML(true);

$db = mysql_connect("host",usuario","password") or die(mysql_error());
@mysql_select_db ("BasedeDatos",$db) or die(mysql_error());

$sql="select a.id, a.email, a.status, b.idemail from emails as a left join temp as b on a.id = b.idemail where (b.idemail IS NULL and (a.status=0 or a.status=99))";
$res=@mysql_query($sql) or die(mysql_error());
$num=@mysql_num_rows($res);

$html="SELECT html FROM envios WHERE asunto='".$_POST['asunto']."'";
$quer=@mysql_query($html) or die(mysql_error());
$resul=@mysql_fetch_array($quer);
$html = $resul["html"];

$comillas = "\'";
$remp = "'";
$html = str_replace($comillas,$remp,$html);

$cont=0;

while($registro=mysql_fetch_array($res))
{
$id = $registro["id"];
// HTML body
$rem="bol01.php?idemail=";
$rem2="bol01.php?idemail=".$id;
$html=str_replace($rem,$rem2,$html);

$remp13 = "contacto.php?idemail=";
$remp14 = "contacto.php?idemail=".$id;
$html = str_replace($remp13,$remp14,$html);

$remp3 = "desuscribir.php?";
$remp4 = "desuscribir.php?email=".$id."&";
$html = str_replace($remp3,$remp4,$html);

$mail->Body = $html;
$mail->AddAddress($registro["email"], $registro["email"]);

if(!$mail->Send())
echo "Error al mandar a " . $registro["email"] . "<br>";

// Clear all addresses and attachments for next loop
$mail->ClearAddresses();
$mail->ClearAttachments();

$rem1="bol01.php?idemail=".$id;
$rem12="bol01.php?idemail=";
$html=str_replace($rem1,$rem12,$html);

$remp113 = "contacto.php?idemail=".$id;
$remp114 = "contacto.php?idemail=";
$html = str_replace($remp113,$remp114,$html);

$remp7 = "desuscribir.php?email=".$id."&";
$remp8 = "desuscribir.php?";
$html = str_replace($remp7,$remp8,$html);

$ins="INSERT INTO temp (idemail,datetime) VALUES ('$id',NOW())";
$resu=mysql_query($ins) or die(mysql_error());
$cont=$cont+1;
}//fin del while

echo "<br>";
echo "Se enviarion $cont emails<br>";
echo "FIN DEL PROCESO.....";
exit();
mysql_close();
?>

TABLA DONDE CONSULTO LOS CORREOS:

CREATE TABLE `emails` (
`id` int(50) NOT NULL auto_increment,
`email` varchar(255) NOT NULL default '',
`nombre` varchar(255) NOT NULL default '',
`apellido` varchar(60) NOT NULL default '',
`status` int(20) NOT NULL default '0',
`valido` varchar(255) NOT NULL default 'pendiente',
`datetime` datetime NOT NULL default '0000-00-00 00:00:00',
`origen` varchar(60) NOT NULL default '',
PRIMARY KEY (`id`,`email`)
) ENGINE=MyISAM AUTO_INCREMENT=162011 DEFAULT CHARSET=latin1 AUTO_INCREMENT=162011 ;

TABLA DONDE HAGO EL INSERT DE LOS CORREOS ENVIADOS:
CREATE TABLE `temp` (
`idemail` int(50) NOT NULL default '0',
`datetime` datetime NOT NULL default '0000-00-00 00:00:00',
KEY `idemail` (`idemail`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

espero esta sea suficiente informacion y de todas maneras voy a seguir investigando que puede estarme causando este problema, porque el script de php no se para, osea, sigue diciendo "Enviando..." pero llega un momento en que el proceso en mysql se muere y ya no sigue insertando entonces no puedo generar un reporte de los enviados, bueno, muchisimas gracias por su 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 07:08.