в общем ситуация следующая - есть список рассылки новостей компании - на данный момент около 2600 почтовых ящиков, необходимо одну новость отправлять всем. есть php код, который абсолютно верно отрабатывает, НО в связи с увеличением количества подписчиков он перестал успевать отработать за период таймаута ответа сервера, ну и соответственно выскакивает 504 гейтвей. Подскажите, как оптимизировать рассылку, чтоб она успевала за время тайаута сервера. <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(); $db->query("select * from $db_news where id='$id'"); $db->fetch(); $title=$db->get("SELECT title FROM $db_news WHERE id='$id'"); $firm=$db->get("SELECT firm FROM $db_news WHERE id='$id'"); $photo=$db->get("SELECT photo FROM $db_news WHERE id='$id'"); $message=$db->get("SELECT message FROM $db_news WHERE id='$id'"); $date=$db->get("SELECT date FROM $db_news WHERE id='$id'"); $published=$db->get("SELECT published FROM $db_news WHERE id='$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>"; echo ("<p><strong>Рассылается новость: ".$title."</strong></p><br>"); $mailcount = 1; $dbn->query("select * from gamma_sub order by email limit 100"); while ($dbn->fetch()) { $email=$dbn->data->email; $subj="Новости *: ".$title; $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"); echo ($mailcount); $mailcount++; } echo ("<br><strong>Разослано ".$mailcount." адресатам</strong><br>"); $db->destroy(); session_write_close(); ?> </body> </html>
понимаешь, оба твоих комментария по сути не дают ни какого ответа. igordata, и рассылка не успевает за таймаут
turanza неудивительно, что не успевает. рассылка писем делается отдельным потоком с помощью планировщика. письма, необходимые к рассылке, пишутся в базу данных и отсылаются порциями, дабы тебя не приняли за спамера.
Если надо организовать рассылку на 10 000 email через php-скрипт, могут-ли быть какие-либо санкции от хостера?
Я как-то писал спамбота )) и при приближении к таймауту - скрипт сам себя вызывал, передавая в переменной $_GET номер строки файла, на которой остановился. Вобщем работало )) Но может есть возможность читать из файла не все строки последовательно, а сразу-же устанавливать маркер чтения на нужную строку - не перебирая весь массив строк с самого начала ???