php: рассылка и вывод из MySQL
1. Достаю из базы, например, сотню email адресов.
Мне нужно в цикле перебрать их все и отправить на каждый email письмо. Проблем-то вроде нет, только на серваке можно за один раз отправить не более 20 писем, далее вылетает ошибка. Можно, конечно, постепенно отправлять наполовину вручную, но хотелось бы, что бы все происходило само с небольшими задержками по времени между рассылками 20 писем и при этом, эти паузы не отражались на сервере. Как это можно реализовать?
2. Из БД выводится какая-то инфа, строится табличка. Как можно сделать что бы табличка выводилась по мере считывания из базы за один проход по циклу, а не после полного прочтения информации? Почему-то flush() не помогает.
Такие задачки:
1. Достаю из базы, например, сотню email адресов.
Мне нужно в цикле перебрать их все и отправить на каждый email письмо. Проблем-то вроде нет, только на серваке можно за один раз отправить не более 20 писем, далее вылетает ошибка. Можно, конечно, постепенно отправлять наполовину вручную, но хотелось бы, что бы все происходило само с небольшими задержками по времени между рассылками 20 писем и при этом, эти паузы не отражались на сервере. Как это можно реализовать?
[quote]
Отправляешь за одно обращение 20 писем. Через 3 секунды браузер редиректися на эту же страницу, но с другими параметрами и отправляешь следующие 20 писем, и так далее.
[quote
2. Из БД выводится какая-то инфа, строится табличка. Как можно сделать что бы табличка выводилась по мере считывания из базы за один проход по циклу, а не после полного прочтения информации? Почему-то flush() не помогает.
И не поможет. MSIE рисует таблицу только после того как встретит тег </table>. Вариант один - разбить таблицу на несколько, например по 10 строк.
Отправляешь за одно обращение 20 писем. Через 3 секунды браузер редиректися на эту же страницу, но с другими параметрами и отправляешь следующие 20 писем, и так далее.
Это понятно, примерно такие мысли и были. Но разве нет возможности обрывать на некоторое время выполнение кода, недавая высокую нагрузку на сервер. Например какая-нибудь ф-ция sleep() или что-то ещё?
И не поможет. MSIE рисует таблицу только после того как встретит тег </table>. Вариант один - разбить таблицу на несколько, например по 10 строк.
Да, догадывался :)... А реально (без таблиц) эту ситуацию flushем можно же разрулить?
Это понятно, примерно такие мысли и были. Но разве нет возможности обрывать на некоторое время выполнение кода, недавая высокую нагрузку на сервер. Например какая-нибудь ф-ция sleep() или что-то ещё?
Можно [phpdoc]sleep[/phpdoc]ом спасть. Только не забудь тогда про [phpdoc]set_time_limit[/phpdoc]
Да, догадывался :)... А реально (без таблиц) эту ситуацию flushем можно же разрулить?
нет. MSIE все равно нарисует таблицу только после того как получит </table>
На сколько я понял, если я выполняю sleep(10), то желательно и set_time_limit(10), что бы уеличить допустимое время выполнения скрипта на 10 сек. до фатальной ошибки, так?
Не сталкивался с set_time_limit.
На сколько я понял, если я выполняю sleep(10), то желательно и set_time_limit(10), что бы уеличить допустимое время выполнения скрипта на 10 сек. до фатальной ошибки, так?
Нет, в set_time_limit задается время через которое скрипт будет принудительно остановлен. Отсчет времени начинается с момента запуска скрипта.
set_time_limit(10) - скрипт прибьется через 10 секунд после старта.
Занчание по умолчанию - 30
set_time_limit(0) - скрипт будет работать без ограничения времени выполнения.
Я рекомендую поставить что-то вроде set_time_limit(3600);
Непонял, ты за один раз шлешь 20 писем, или письмо на 20 адресов? Если письмо аналогично для всех шли сразу на макс. допустимое количество получателей.
Одно и тоже письмо на 20 получателей, точнее, их гораздо больше, но можно максимум 20 писем отправить, что и делается... Но нужно всей толпе отправить, поэтому придется прибегать к особым мерам.