Как отправить только электронное письмо один раз после X количество времени - PullRequest
0 голосов
/ 03 июня 2019

Я делаю уведомление о тревоге PHP, которое отправит электронное письмо, если будет достигнута заданная температура.

У меня есть CRONJOB, который запускается каждую 1 минуту, запускает PHP-скрипт, который проверяет температуру, и если температура достигает точки, она отправляет мне уведомление по электронной почте.

Проблема в том, что он будет отправлять мне уведомление по электронной почте каждую минуту, когда температура превышает заданное значение из-за CRONJOB. Я хотел бы, чтобы он отправил мне электронное письмо только один раз. Не отправлять одну минуту.

Я использую MYSQL для хранения информации о тревоге. Если мне нужно кое-как настроить отметку времени в mysql и заставить скрипт проверить время и отправить его в течение x промежутка времени .?

Спасибо

1 Ответ

0 голосов
/ 03 июня 2019

Вы можете сделать расчет в коде приложения или непосредственно в БД. Вот немного псевдокода.

Код приложения

CONST NOTIFICATION_DURATION = '30 minutes';

$mostRecentNotification = query('SELECT MAX(created_at) FROM notifications');

// Notice we're doing the calculation in our application code.
$nextAvailableNotification = $mostRecentNotification + NOTIFICATION_DURATION;

if (current_time >= $nextAvailableNotification) {
    send_notification();
}

Если вы решите использовать версию кода приложения, я настоятельно рекомендую использовать такую ​​библиотеку, как Carbon (https://carbon.nesbot.com/), чтобы помочь вам с арифметикой даты / времени. Это действительно спасает жизнь даже при простых вычислениях как этот.

Версия базы данных

CONST NOTIFICATION_DURATION = '30 minutes';

// Notice we're doing our calculation in our database
$nextAvailableNotification = query('SELECT MAX(created_at) + INTERVAL ' . NOTIFICATION_DURATION . ' FROM notifications');

if (current_time >= $nextAvailableNotification) {
    send_notification();
}

Вы можете дополнительно сжать версию базы данных, выполнив сравнение непосредственно в своем запросе, но я оставлю это на ваше усмотрение.

...