PHP: един cronjob с текущо условие за час за изпращане на няколко различни имейла

Имам няколко вида автоматизирани имейли, които да се изпращат програмно до потребителите в моята база данни. Сумата ще се промени, но часовете за изпълнение са точно :00.

Така че вместо да задавам различни задания на cron да се изпълняват в различни часове на деня, мислех да създам само един скрипт, който да се изпълнява всеки час, който проверява времето и съответно изпраща имейли. Ето грубата идея:

date_default_timezone_set('America/Los_Angeles');
// setting the timezone to the one of the hosting server
$cur_hour = (int)date('G'); // PDT hour

if ($cur_hour == 1) { // 1am

    // collect information from db
    // send e-mail A to these users
    // update db

} elseif ($cur_hour == 2) { // 2am

    // collect information from db
    // send e-mail B to these users
    // update db

} elseif ($cur_hour == 3) { // 3am

    // likewise…

}

Това правилният подход ли е или има по-ефективен или по-добър начин да направите това?

Допълнителна информация: В някои имейли има променливи, така че не мога да изпратя нито един имейл там. Ще трябва да изпратя напр. Изпратете имейл A до всеки приложим потребител поотделно. И все още няма хиляди потребители.


person inhan    schedule 22.06.2012    source източник


Отговори (1)


Бих имал масив от низове (шаблони), които могат да включват неща като $username и т.н. Изберете подходящия низ от масива въз основа на часа. Използвайте eval, за да създадете имейл съобщението за този потребител.

Въпреки това, което хората казват, това е добра употреба на eval. Безопасно е, тъй като низът е под ваш контрол. Просто се уверете, че променливите са дезинфекцирани (но като добър програмист бихте направили това, преди да ги поставите в базата данни, или да ги избегнете).

person Ed Heal    schedule 22.06.2012
comment
Работата е там, че моите променливи не са Уважаеми [име] [фамилия], за да бъдат изпратени до променливата [имейл]. Имам, например, нещо като Имате N1 нови известия в последното N2, където N1 е цяло число, а N2 е друго цяло число, което става 24 hours,3 days,week, 2 weeks или month в зависимост от предпочитанията за честота на изпращане на имейли за уведомяване на конкретния потребител. - person inhan; 22.06.2012
comment
Защо просто не конвертирате тези цели числа в низ във формата, преди да конструирате имейл съобщението? - person Ed Heal; 22.06.2012
comment
Вече правя това, но случаят е, че всеки имейл приема различно количество променливи с различни стойности. Както и да е, всъщност се опитвам да разбера дали проверката на времето и съответното изпълнение на различни скриптове с помощта на условия if (като в моя примерен код) е правилният начин. - person inhan; 23.06.2012
comment
@inhan - Защо не просто да имате 24 cron скрипта (може да са един и същ скрипт с различни параметри). Редактирането на crontab е еднократна работа - person Ed Heal; 23.06.2012
comment
@inham - Съществува набор от низове, които можете да използвате във вашите шаблони. Някои може да са празни. - person Ed Heal; 23.06.2012
comment
Все още не отговаря на въпроса ми тук. Благодаря все пак за усилията. - person inhan; 23.06.2012
comment
@inhan - Какъв е въпросът? - person Ed Heal; 23.06.2012