PHP: добавление таймера
Я создаю приложение списка рассылки. Он будет отправлять 40 писем в час из-за ограничений почтовой службы. Как я могу добавить таймер?
4 ответа
Если вам нужно создать запланированное задание, я бы предложил создать задание Cron.
Вы можете приостановить скрипт, используя sleep()
функция. Однако это не очень хорошее решение. Гораздо лучший подход - использовать Cron, который позволяет выполнять скрипт раз в 40 минут. Сам скрипт должен только проверять, сколько раз он был выполнен - эта информация может быть сохранена в каком-то файле:
$counter = file_exists('counter') ? file_get_contents('counter') : 1;
echo sprintf('Send %d portion of emails.', $counter);
file_put_contents('counter', ++$counter);
Одним из решений будет создание таблицы базы данных для хранения сведений о отправленных вами электронных письмах. Допустим, это выглядит так:
CREATE TABLE SentEmail (
email_id INT NOT NULL,
recipient_id INT NOT NULL,
time_sent DATETIME NOT NULL,
PRIMARY KEY (email_id, recipient)
)
Вот email_id
должен быть внешним ключом таблицы, содержащей письма, помеченные для отправки, и recipient_id
должен быть внешним ключом к таблице, содержащей сведения о ваших получателях. time_sent
очевидно, записывает время отправки письма.
Теперь, когда вы хотите отправить электронную почту, вы хотите знать,
- сколько писем было отправлено в этот час; это можно найти с помощью
COUNT
запрос - кому уже было отправлено письмо, с которым вы сейчас работаете; это также простой запрос.
Возможный вариант этого заключается в том, чтобы иметь в таблице строку для каждой комбинации электронной почты и пользователя, которую вы намереваетесь отправить, а не только одну для каждого отправленного до сих пор электронного письма, и иметь столбец, показывающий, было ли это письмо уже отправлено этому пользователю., Это позволит легко определить, кому еще нужно отправить электронное письмо.
Вы бы совмещали этот подход с заданием Cron, как предлагали другие, чтобы регулярно обрабатывать очередь писем.