У меня есть php-скрипт, который читает один файл через http (файл находится в другом домене). Я хотел бы прочитать этот файл только один или два раза в день, вместо того, чтобы подключаться к нему каждый раз, когда сайт обновляется. Есть ли другой способ, чем делать это с помощью cron? Я не хочу использовать cron, потому что я предпочитаю настроить это поведение в самом скрипте .. поэтому он является гибким, поэтому я могу использовать его в любом месте, не настраивая cron каждый раз. благодаря
Если вы не можете или не хотите использовать использование cron, и нормально обновлять его только при доступе к странице. Вы можете кэшировать результат HTTP-запроса и обновлять его только на странице, загружая его, если кеш старше дня или любого выбранного вами интервала.
Я делал это в прошлом, когда у меня не было доступа к 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()); } }
Вы также можете использовать веб-Cron, если хотите попасть на сайт с интервалом времени.
Вы даже можете использовать таблицу базы данных – действительно простую по структуре, id, дате, URL-адресу скрипта и тому, что вам нужно – и добавляйте строку каждый раз, когда вы запускаете скрипт.
Затем, прежде чем запускать скрипт, просто проверьте номера строк за каждый день, который у вас есть.
Вы можете использовать Cronjob . Затем вы можете запустить php-скрипт по командной строке.
php /someplace/somefile.php
Cronjob будет следующим, если вы будете обновлять каждый день.
0 0 * 0 0 php /someplace/somefile.php
Поскольку вы явно заявляете, что не хотите использовать cron, единственный способ сделать это (без чего-то аналогичного cron) – настроить ваш скрипт как демон. Однако, если вам действительно не нужна гибкость, которую предоставляют демоны, cron намного проще и проще.
Вот один проход демона .
Если вы используете дистрибутив Linux с systemd:
У меня возникла необходимость в планировании годовых заданий, независимо от приложения (в случае перезагрузки системы или чего-то подобного), и мне было предложено использовать таймеры systemd . На странице Arch Wiki на нем приводятся некоторые примеры.
Если вы находитесь в среде * nix, вы можете использовать задания cron
Что случилось с cron?
У вас есть пара вариантов с cron – ваш php может быть вызван интерпретатором PHP в командной строке, или вы можете использовать wget или fetch или эквивалент для вызова вашего PHP на сервере.
В общем, PHP, выполняемый из контекста веб-сервера, имеет ограничение на продолжительность работы, поэтому в общем случае вы не можете настроить «фоновые» потоки PHP для создания «позже».