Лимитированная рассылка новостей

Quexx

Новичок
Здравствуйте! Нужно прояснение в таком моменте. Есть база с е-мейл адресами (подписчики), на данный момент около 100, но будет постоянно расти. Скрипт рассылки вызывается раз в сутки кроном. Но так как использую хостинг, то имеются ограничения в 20 писем с периодичностью в минуту. Я согласен на такие ограничения, но вот не могу сообразить как мне переделать скрипт. Использовать в цикле sleep()? Но как он работает вообще, не влияет ли это на общее время выполнения скрипта (лимит PHP)? Или несколько раз вызывать крон через каждую минуту? Но не могу понять тогда.. как получить данные о том, скольким я пользователям уже сделал рассылку.. И вообще как такие вещи реализуются? В сети чаще встречаются готовые классы, но хотелось бы самому понять, без копаний в чужих трудах.
 

fixxxer

К.О.
Партнер клуба
да.
Но не могу понять тогда.. как получить данные о том, скольким я пользователям уже сделал рассылку
очередь. грубо говоря делаешь табличку в базе, пишешь туда по 1 строке на каждого подписчика, отправив - удаляешь.
 

Quexx

Новичок
Дошло, но не совсем.. по 1 строке.., а что в строке? Типа что-то отправил записал 1, у тех что не отправлено 0? Тут я соображаю, что могу выбирать по 20 записей, где поле 0 через каждую минуту, так? И так до тех пор пока у всех данное поле не заполню 1. А при запросе очередной 20-ки с нулями, если таковых не обнаружиться - все единицы обновляю на ноль... правильно понимаю? А вариант со слипом в цикле после 20 интераций?
 

shelestov

я тут часто
А вариант со слипом в цикле после 20 интераций?
Скрипт по каким то причинам может обломаться, тогда не отправятся все письма.
Если же обламается крон, то письма отправятся при следуещем его запуске.
 

Quexx

Новичок
И еще не могу понять.. Как тогда запустить крон каждую минуту, определенное количество раз..? Ведь скрипту рассылки никаким образом не известно, кто его запускает, у них нет связи между собой. Или поставить его, например, запускаться каждый день с периодичностью в 1 минуту 10 раз.. такого количества запусков хватит на 100 (20х10) писем.. Но по мере роста базы нужно будет и запуски крона редактировать постоянно.., потому как я не хочу ему сразу ставить хотя бы те-же 100 раз.. чтоб в холостую не молотил.. Правильно мыслю.? Или чего-то не понимаю еще?
 

AmdY

Пью пиво
Команда форума
Quexx
просто поставь чтобы зхапускался раз в минуту крон, запустился, проверил есть ли что рассылать, если есть - послал, если нет просто завершился.
 

Quexx

Новичок
AmdY
Тогда такой вопрос.. это не часто будет вызывать крон каждую минуту в течение всего дня?
 

AmdY

Пью пиво
Команда форума
Quexx
нет, это не часто, база данных может обрабатывать тысячи запросов в секунду, так что твой один в минуту это плёвое дело.
 

Quexx

Новичок
AmdY
Спасибо! Про базу мне известно.., а вот про вызов самого крона можно еще уточнить..? Его вызов такое количество раз не будет считаться частым (какая-нибудь лишняя нагрузка на сервер и тд.)? Я просто все время обходился без него, использовал как то раз, для очищения логов, но там ситуация другая была (раз в месяц), поэтому о нем мало мне что известно.
 

fixxxer

К.О.
Партнер клуба
Если ты там не будешь особенно жестко насиловать базу и запускать по 500 скриптов сразу - нет.

Нет никакой разницы с точки зрения нагрузки, запущен скрипт кроном или дерганием урла.
 

Quexx

Новичок
Нет, я не маньяк-насильник))) Он будет запускать скрипт, который за раз будет выбирать 20 адресатов и слать им письмо.. ни и делать апдейт в базу..этим же 20, за раз это не нагрузка..Записей в базе смешное количество для MySQL. Спасибо, товарищи, за оказанную помощь, попробую сделать сам скрипт.
 

tXcode

Умный кодер
Quexx

Адреса хранятся в Mysql или похожем? Если да, то:

SELECT * FROM `your_table` WHERE `send` = '0' LIMIT 0, 20

Вызывать крон каждую минуту - абсолютно нормально.
 

Quexx

Новичок
tXcode
Ага, хронятся в MySQL.. Я поэксперементирую с запросом.., честно сказать родилась идея запрос сделать типа:
PHP:
$sql = "SELECT usrname, usermail FROM `your_table` WHERE `date_send` <> '$today_date' LIMIT 0, 20";
// где, '$today_date - сегодняшняя дата..
И рассылка будет происходить, до тех пор, пока есть дата меньше сегодняшней даты.., в условии можно кстати так и указать.. что не <>, а < ..

Все же по крону много вопросов (вот честно не знаю его.., может по этому много вопросов не нужных).., надо погуглить.. Могу же я его настроить так чтоб, он вызывался каждую минуту.. в часы например.. с 10 до 12?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
* 10-12 * * *

команда вроде бы будет такая. (формат записи в журнал)
 

Quexx

Новичок
c0dex
Ок, спасибо, попробую. Отпишу не зависимо от поставленной задачи и достигнутой цели.
 
Сверху