Выполнение сценария в точное время в будущем

Я работаю над проектом PHP, где пользователи размещают рекламные посты. Когда рекламное сообщение размещается в сети, ему присваивается «дата скрытия» (хранится в базе данных), когда она больше не будет показываться пользователям. Когда происходит «скрытие даты» (например, в следующий понедельник в 10:00), мне нужно запустить скрипт, который вносит изменения в базу данных (не связанные с сокрытием рекламы).

Вопрос:
Как запустить скрипт в точное время в будущем (на «дату скрытия»).

Я много гуглю и не нашел хорошего решения.

Найдены возможные решения:

  • Крона больше не считают из-за его недостаточной точности (для моей задачи важны даже секунды).

  • Напишите демон, который будет проверять каждую секунду, существует ли запись с «датой скрытия», но она может быть очень трудоемкой.

  • Другой способ, как мне сказали, что очереди сообщений могут быть полезны, но после прочтения некоторой документации я не нашел способа установить дату и время обработки сообщения в очереди.

Кто-нибудь может указать, где искать? Любой инструмент / язык считается.

1

Решение

Давайте предположим, что реклама показывается до недели после
Создайте поле в вашей таблице объявлений с именем expiry_date (timestamp)
Когда новое объявление вставлено, сделайте следующее

$expiry_date = strtotime("+ 7 days");

Затем введите дату истечения срока действия вместе с записью
Затем на странице, где отображаются объявления, выберите только объявления, срок действия которых еще не истек, поэтому

SELECT * FROM ads WHERE expiry_date >= NOW()

Это будет показывать только объявления, срок действия которых еще не истек.

0

Другие решения

Если ваш сайт работает на сервере Linux, вы можете добавить хрон работа чтобы запустить ваш скрипт обновления.

Если ваш сайт работает под управлением Windows, используйте Диспетчер задач вместо.

Тем не менее, это не похоже на ваше лучшее решение. Вы можете сохранить «дату скрытия» в базе данных вместе с остальными данными поста. Затем вы можете просто отфильтровать сообщения в вашем коде дисплея.

0