сделал рассылку: сообщение сгружается в базу, туда же статус рассылки и айди абонента (последнего, кому отправлено сообщение) и максимальный айди абонента. дальше сделал саму рассылку (текст ниже) и написал рассылку по расписанию (cronTab) - скрипт запускается каждую минуту и рассылает соответственно по 30 сообщений, НО проблема заключается в том,что он приодически зацикливается, то есть после отправки всех 30-ти сообщений не записывает в базу новое значение айди последнего абонента, которому было отправлено сообщение, ну и получается,что отправляет сообщения одним и тем же 30-ти. Подскажите почему так происходит. <html> <head> <title>Рассылка новости</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> <?php require_once("config.inc.php"); require_once("librarias/sql.lib.php"); require_once("librarias/functions.lib.php"); $db=new sql(); $dbn=new sql(); $limit =30; //лимит отправляемых за раз сообщений $id =0; $status = 0; $db->query("SELECT `id`,`message`, `title` , `result`, `number`, `news_id` FROM `send_mail` where(`status`='0')"); /* id- id message - имя базы, откуда извлекается сообщение news_id - id рассылаемой новости title - тема сообщения result - максимальный id, которому отправлены сообщения number - максимальный id который есть в базе */ while($db->fetch()) { $messcount=0; $idn=$db->data->id; $db_news=$db->data->message; $news_id=$db->data->news_id; //$m ="SELECT message FROM ".$db_news." WHERE id='".$news_id."'"; $message=$dbn->get("SELECT message FROM ".$db_news." WHERE id='".$news_id."'"); $mess="<html><head><base href=http://www.*.spb.ru/></head><body>$message<br><a href=\"http://www.*.spb.ru\">*</a><p>Для отказа от данной рассылки: зайдите по адресу <a href=\"http://www.*.spb.ru\">www.*.spb.ru</a> и введите свой адрес в поле Подписка.</body></html>"; $title=$db->data->title; $res=$db->data->result; $maxId = $db->data->number; $subj="Новости *-Санкт-Петербург : ".$title; $t=""; $dbn->query("SELECT `id`, `email` FROM gamma_sub where (id>'".$res."') Order by `id` limit ".$limit);//щ while($dbn->fetch()) { $email=$dbn->data->email; $ids=$dbn->data->id; $temp=mail("$email", $subj, $mess, "MIME-Version: 1.0\r\nFROM: sale@*.spb.ru\r\nContent-Type: text/html; charset=\"windows-1251\"\r\nContent-Transfer-Encoding: 8bit"); $messcount++; $t= $t.$messcount." ".$email." <br>"; $id=$ids; } //$messx = "новость условно разослана >>".$messcount."<< получателям, максимальный ID =>>".$id."<<,<br>".$mess."<br> запрос: <br>".$m.""; $temp=mail("*@*.spb.ru", $subj, $t, "MIME-Version: 1.0\r\nFROM: sale@*.spb.ru\r\nContent-Type: text/html; charset=\"windows-1251\"\r\nContent-Transfer-Encoding: 8bit"); if($id == $maxId) { $dbn->query("UPDATE send_mail SET `status`='1' WHERE(`id`='$idn')"); }else { $dbn->query("UPDATE send_mail SET `result`='".$id."' WHERE(`id`='".$idn."')"); //echo("<br>query:UPDATE send_mail SET `result`='".$id."' WHERE(`id`='".$idn."') <br>"); } $id=0; } $db->destroy(); //$dbn->destroy(); session_write_close(); ?> </body> </html>
есть мысль, что происходит сие из-за того, что авторизация после отправки по тайауту слетает(запускается рассылка из cms-ки) и он больше не может записывать в базу. хотя сам вот этот файлик запускается с cronTabа... посему непонятно