Имеется массив,не важно чего,допустим,пользователей,выбранный из MySQL,с каждым пользователем нужно произвести какую либо операцию,например,отправить ему сообщение в личку,или письмо с уведомлением.(UPDATE для всех в таблицу не прокатит,если допустим письмо нужно выслать на почту,поздравить с праздником.) Логично предположить,что мы банально не успеем обойти весь массив,до истечения времени работы скрипта,а если увеличим его то вызовем огромную нагрузку на сервер. как решить эту задачу без потерь?? Пока что пришло в голову только делать выборку например по 50-100 значений,обрабатывать их,а затем ставить редирект на тот же скрипт,но уже с другим параметром для выборки,и так пока не обойдем всю базу. Выполнять это в фоне,открыв через AJAX,а пока процесс идет крутить пользователю анимацию ожидания.Ну или вообще сообщить ему что процесс запущен и пусть занимается своими делами,пока не получит уведомление об успехе операции. Может есть более элегантные решения?
А зачем тут крон если все запускается по желанию пользования? Или я не совсем понимаю всю глубину его глубин?
пока пользователь лазит по станичке. Ajax в роли секректного агента начинает прослушивать сервер на предмет заданий для выполнения и выполняет их бредовое решение конечно.
Тебе надо оптимизировать запрос и перезавать нагрузку на SQL, потому что пихапе долго всю эту конитель будет елозить. Ты делаешь так: PHP: foreach ($a as $b) { insert into tabla set a=$b['name']...; } а попробуй так: PHP: $insert_arr=array(); foreach($query as $row) { $insert_arr[]=array("name"=>$row,"text"=>$row["text"]); } потом делаешь мульти вставку PHP: $str_insert="INSERT INTO tabla ('name','text') VALUES "; $foreach($insert_arr as $insert_row) { $str_insert.=sprintf("('%s','%s'),",$insert_row['name'],$insert_row['text']); } #и выполняем всего 1 запрос вместо 1000 mysql_query($str_insert); Для рассылки писем советую создать таблу для очереди писем, и кроном их рассылать и удалять из очереди. Можно поставить крон на выполнение на каждую минуту и отсылать письма пачками по 100-200 штук. Хотя если текст письма одинаковый, рассылку можно оптимизировать, указывая в 1 письме несколько получателей. В опсчем пили напильником, оптимизируй, иначе с хоста выгонят=)
А вообще унаследуй новый класс от класса БД и в нем реализуй такую систему мульти-вставки. Чтоб ты ему давал массив, а он сам его делил на пачки и вставлял. Для рассылки юзай phpmailer.
Lex243 не слушай что тут холиварят. Ъ пацаны делают так: при необходимости рассылки писем, пользователь помечает/генерирует в базе те письма, которые необходимо отослать. есть скрипт, который при запуске проверят, есть ли в базе письма, помеченные для отправки, и, если есть, берёт первые 100 писем и отсылает их. данный скрипт запускается каждые 3-5 минут с помощью крона. как только все письма будут отосланы, при запуске скрипт будет видеть, что писем для отсылки больше нет, и больше делать ничего не нужно.