Как запустить PHP скрипт в определенный интервал (например, один раз в день)?

У меня есть PHP скрипт, который читает один файл через http (файл находится в другом домене). Я хотел бы прочитать этот файл только один или два раза в день, вместо того, чтобы подключаться к нему каждый раз, когда сайт обновляется. Есть ли другой способ, чем делать это с помощью cron? Я не хочу использовать cron, потому что я предпочитаю настроить это поведение в самой script.. поэтому он является гибким, поэтому я могу использовать его в любом месте, не настраивая cron каждый раз. спасибо

Ответ 1

Если вы не можете или не хотите использовать use cron, и это нормально обновлять его только при доступе к странице. Вы можете кэшировать результат HTTP-запроса и обновлять его только на странице, загружая его, если кеш старше дня или любого другого интервала, который вы выберете.

Ответ 2

Я делал это в прошлом, когда у меня не было доступа к cron:

$lastRunLog = '/path/to/lastrun.log';
if (file_exists($lastRunLog)) {
    $lastRun = file_get_contents($lastRunLog);
    if (time() - $lastRun >= 86400) {
         //its been more than a day so run our external file
         $cron = file_get_contents('http://example.com/external/file.php');

         //update lastrun.log with current time
         file_put_contents($lastRunLog, time());
    }
}

Ответ 3

Вы также можете использовать веб-сайт Cron, если вы хотите поразить сайт по временному интервалу.

Ответ 4

Вы даже можете использовать таблицу базы данных - очень простую по структуре, id, date, script url и все, что вам нужно - и добавлять строку каждый раз при запуске script.

Затем перед запуском script просто проверьте номера строк за каждый день, который у вас есть.

Ответ 5

Вы можете использовать Cronjob. Затем вы можете запустить php script с помощью командной строки.

php /someplace/somefile.php

Cronjob будет следующим, если вы будете обновлять каждый день.

0  0  *  0  0  php /someplace/somefile.php

Ответ 6

Поскольку вы явно заявляете, что не хотите использовать cron, единственный способ сделать это (без чего-то аналогичного cron) - настроить ваш script как демон. Однако, если вам действительно не нужна гибкость, которую предоставляют демоны, cron намного проще и проще.

Здесь один демон демонстрации.

Ответ 7

Если вы используете дистрибутив Linux с systemd:

Мне нужно было планировать годовые задания, независимо от приложения (в случае перезагрузки системы или что-то в этом роде), и мне было предложено использовать таймеры systemd. В Arch Страница Wiki на нем приводятся некоторые примеры.

Ответ 8

Если вы находитесь в среде * nix, вы можете использовать задания cron

Ответ 9

Что случилось с cron?

У вас есть пара вариантов с cron - ваш php может быть вызван интерпретатором PHP в командной строке, или вы можете использовать wget или fetch или эквивалент для вызова вашего PHP на сервере.

В общем, PHP, выполняемый в контексте веб-сервера, имеет ограничение по времени на выполнение, поэтому в общем случае вы не можете настроить "фоновые" потоки PHP для создания "позже".