![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
begin |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 415 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
Я использую функцию mail для рассылки новостей всем зарегиным пользователям на своем сайте. Для этого скрипт рассылки просто перебирает всех пользователей из базы, и отсылает в цикле текст письма.
И все работало до поры до времени. Но теперь, когда на сайте стало почти 1000 пользователей, страница управления рассылкой просто зависает в браузере - ответ от скрипта идет слишком долго, и браузер думает, что страница не найдена. И кажется, плюс ко всему, теперь еще и последние по списку юзеры не получают письмо. Видимо скрипт к тому времени убивается на сервере :( Подскажите, как мне решить эту проблему? Я думаю, нужно разбить процесс на части, скажем по 100 пользователей.. Но как это реализовать? Как заставить думать браузер (да и сам сервер), что скрипт не завис? Добавлено через 4 минуты и 42 секунды Вот нашел сходный топик, но там так и не решили этот вопрос: http://forum.vingrad.ru/topic-123094.html Это сообщение отредактировал(а) begin - 17.3.2008, 15:19 |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
можно увеличить время работы скрипта set_time_limit();
либо в самом деле разбить рассылку. как? больше зависит от вас с ходу такое решение: рассылке присваиваем идентификационный номер (№5) можно вводить из формы, перекидываем список подписчиков в спец. таблицу данных (назовём её очередь), вместе с их адресами и этим id, начинаем рассылать по адресам из этой таблицы, отослал - изменил флаг в таблице на 1, а по исходу сотни в браузер сообщение "первая сотня ушла", по окончанию сообщение - рассылка полностью завершена в случае если это сообщение в итоге не появилось, оператор снова жмёт кнопку (в принципе можно даже на js повесить), скрипт запускается снова, вытаскивает из таблицы все записи с флагом не 1 и рассылает что-то такое по окончанию - удаление всех записей |
|||
|
||||
KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
Я сталкивался с подобной проблемой.
Мои наблюдения: 1) Критическое число юзеров -- около 500 человек. Более - начинаются описанные автором проблемы. 2) Разбивал работу скрипта по 50 получателей именно так, как советует bars80080. Реально помогает. При кол-ве более 1500 получателей начинаются глюки, даже с использованием разбиения по 50 получателей. Проблему не решил никак. |
|||
|
||||
begin |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 415 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
Только что пришел ответ от хостера:
То есть получается, что мало того, что я должен разбить рассылку по 300 писем в час, но еще и эти 300 писем придется отсылать порциями по 50 писем ![]() Сайт то не мой - а моих заказчиков.. Как я им объясню, что их человеку придется отсылать письма так тяжко? Не поймут ![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
если делать всё как надо, то придётся писать скрипт, который сам будет подготавливать данные по нажатию одной кнопки, а за ходом выполнения тогда должна следить cron, но это если поддерживает система
однако, сдаётся мне, что ты заметил лимит только на >800, следовательно, можно не заморачиваться, а делать продуктивную систему, способную отправить всё сразу, а если не получается, тут же совершающую новый подход |
|||
|
||||
Canarat |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 11.3.2008 Где: Каспий Репутация: 5 Всего: 5 |
Стандартное решение в таких случаях - порционная отправка + cron'ирование скрипта, как правильно здесь заметили. А вот заставлять человека, работающего с сайтом, жать на кнопочки - это нарушение профессиональной этики и вообще всех возможных неписанных правил )
|
|||
|
||||
begin |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 415 Регистрация: 16.5.2007 Репутация: нет Всего: нет |
значит щас буду изучать cron , потому что я тоже иного выхода не вижу
|
|||
|
||||
eee |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 14.4.2008 Где: ХарьковCity Репутация: нет Всего: 1 |
Снова поднимаю тему. Проблема похожая. За исключением результатов - страница не виснет.
Суть в том, что выполняется массовая рассылка пользователям. Пользователи уже до этого выбраны из базы и занесены в INI-файлы в формате email = "hash". Скрипт:
Как вы уже догадались, var_dump()-ы там находятся никак не случайно. Дело в том, что функция ведет себя слегка странно - вылетает на произвольном email-е.
В скрипте берется файл, парсится через parse_ini_file() и полученный массив передается функции send(), которая уже шаманит как хочет. INI-файлов 3 — 3 вида пользователей. В одном ~13000—15000 пользователей, Во втором ~2500, В третьем ~100. Прошу вашей помощи, потому что я уже ничего не могу понять. Спасибо. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |