PHP планирование задачи на веб-хостинг без SSH / Console - PullRequest
0 голосов
/ 27 мая 2019

У меня есть сайт php, на котором есть скрипт, который выполняет обновление для моей базы данных с данными из внешнего API.Сам скрипт отлично работает, но мне нужно рассчитать его так, чтобы он выполнялся каждый понедельник в 2:30.Я использую веб-хостинг, где SSH не доступен, равно как и любая другая форма выполнения команд, такая как exec() или passthru().Я также посмотрел на работу CRON, но я также не могу использовать это, потому что у меня нет доступа к консоли.

Другой вариант, который я нашел, - это использование потоков с phthreads.Но мне показалось, что для его использования мне нужна дополнительная библиотека (PECL), но опять же, поскольку я не могу использовать какую-либо консоль, я не могу установить эту зависимость.

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

Также VPS для меня не вариант.

Извините за мой плохой английский, это не мой родной язык.

1 Ответ

0 голосов
/ 27 мая 2019

Один из способов сделать это - позволить посетителям вызвать обновление.

  • Преимуществом этого является то, что вы не выставляете свой скрипт обновления миру.
  • Недостатком является то, что ваша база данных не будет обновлена ​​до посещения вашего первого пользователя после 2:30 по понедельникам, и что первый пользователь должен будет ждать обновления базы данных.

Добавьте это к вашему сценарию:

/**
 * Checks if the database's last update was before 
 * Monday at 02:30
 *
 * @param \DateTime Time of last update.  Must be converted to DateTime object
 * @return boolean
 */
function databaseIsOutOfDate(DateTime $createDate) {

  // find the last Monday at 2:30 am.
  $monday = (new DateTime())->modify('tomorrow')->modify('previous monday')->format('Y-m-d 02:30:00');
  $lastUpdated = $createDate->format('Y-m-d H:i:s');

  return ($lastUpdated < $monday);
}

$date_time_from_database = '2019-05-27 02:30:00'; // this date value comes from your database
$last_updated = new DateTime($date_time_from_database);  

if(databaseIsOutOfDate($last_updated)) {
  print "Updating database, please try again later";
  // trigger your update script
  die; // if you continue, you'll have race condition.
}

print "continue with script";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...