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, как предлагали другие, чтобы регулярно обрабатывать очередь писем.

Другие вопросы по тегам