Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > зависает страница при массовой рассылке mail |
Автор: begin 17.3.2008, 15:17 |
Я использую функцию mail для рассылки новостей всем зарегиным пользователям на своем сайте. Для этого скрипт рассылки просто перебирает всех пользователей из базы, и отсылает в цикле текст письма. И все работало до поры до времени. Но теперь, когда на сайте стало почти 1000 пользователей, страница управления рассылкой просто зависает в браузере - ответ от скрипта идет слишком долго, и браузер думает, что страница не найдена. И кажется, плюс ко всему, теперь еще и последние по списку юзеры не получают письмо. Видимо скрипт к тому времени убивается на сервере :( Подскажите, как мне решить эту проблему? Я думаю, нужно разбить процесс на части, скажем по 100 пользователей.. Но как это реализовать? Как заставить думать браузер (да и сам сервер), что скрипт не завис? Добавлено через 4 минуты и 42 секунды Вот нашел сходный топик, но там так и не решили этот вопрос: http://forum.vingrad.ru/topic-123094.html |
Автор: bars80080 17.3.2008, 16:16 |
можно увеличить время работы скрипта set_time_limit(); либо в самом деле разбить рассылку. как? больше зависит от вас с ходу такое решение: рассылке присваиваем идентификационный номер (№5) можно вводить из формы, перекидываем список подписчиков в спец. таблицу данных (назовём её очередь), вместе с их адресами и этим id, начинаем рассылать по адресам из этой таблицы, отослал - изменил флаг в таблице на 1, а по исходу сотни в браузер сообщение "первая сотня ушла", по окончанию сообщение - рассылка полностью завершена в случае если это сообщение в итоге не появилось, оператор снова жмёт кнопку (в принципе можно даже на js повесить), скрипт запускается снова, вытаскивает из таблицы все записи с флагом не 1 и рассылает что-то такое по окончанию - удаление всех записей |
Автор: KonstRuctor 17.3.2008, 16:35 |
Я сталкивался с подобной проблемой. Мои наблюдения: 1) Критическое число юзеров -- около 500 человек. Более - начинаются описанные автором проблемы. 2) Разбивал работу скрипта по 50 получателей именно так, как советует bars80080. Реально помогает. При кол-ве более 1500 получателей начинаются глюки, даже с использованием разбиения по 50 получателей. Проблему не решил никак. |
Автор: begin 17.3.2008, 16:50 | ||
Только что пришел ответ от хостера:
То есть получается, что мало того, что я должен разбить рассылку по 300 писем в час, но еще и эти 300 писем придется отсылать порциями по 50 писем ![]() Сайт то не мой - а моих заказчиков.. Как я им объясню, что их человеку придется отсылать письма так тяжко? Не поймут ![]() |
Автор: bars80080 17.3.2008, 17:22 |
если делать всё как надо, то придётся писать скрипт, который сам будет подготавливать данные по нажатию одной кнопки, а за ходом выполнения тогда должна следить cron, но это если поддерживает система однако, сдаётся мне, что ты заметил лимит только на >800, следовательно, можно не заморачиваться, а делать продуктивную систему, способную отправить всё сразу, а если не получается, тут же совершающую новый подход |
Автор: Canarat 17.3.2008, 17:44 |
Стандартное решение в таких случаях - порционная отправка + cron'ирование скрипта, как правильно здесь заметили. А вот заставлять человека, работающего с сайтом, жать на кнопочки - это нарушение профессиональной этики и вообще всех возможных неписанных правил ) |
Автор: begin 17.3.2008, 18:52 |
значит щас буду изучать cron , потому что я тоже иного выхода не вижу |
Автор: eee 20.10.2009, 12:54 | ||||
Снова поднимаю тему. Проблема похожая. За исключением результатов - страница не виснет. Суть в том, что выполняется массовая рассылка пользователям. Пользователи уже до этого выбраны из базы и занесены в INI-файлы в формате email = "hash". Скрипт:
Как вы уже догадались, var_dump()-ы там находятся никак не случайно. Дело в том, что функция ведет себя слегка странно - вылетает на произвольном email-е.
В скрипте берется файл, парсится через parse_ini_file() и полученный массив передается функции send(), которая уже шаманит как хочет. INI-файлов 3 — 3 вида пользователей. В одном ~13000—15000 пользователей, Во втором ~2500, В третьем ~100. Прошу вашей помощи, потому что я уже ничего не могу понять. Спасибо. |