[Php] Задача Cron Job $ _SERVER


Answers

$_SERVER['HTTP_HOST'] не заполняется при запуске из cronjob, к файлу не обращается через HTTP.

Вам придется либо жестко закодировать хост, либо передать его с помощью аргумента командной строки и получить доступ к нему через $_SERVER['argv'] .

Question

Я хочу запустить работу cron. Мое приложение разработано в PHP и Mysql.

В браузере, если я использую $_SERVER[HTTP_HOST] в кодировании, он отлично работает. Но если я использую то же самое в работе cron, он дает ошибки.

Может ли какой-нибудь орган дать предложение исправить это?




Как было сказано ранее, $ _SERVER нет, когда вы запускаете php через php-cli.

Хотя есть возможность запускать ваши скрипты cron'd в php-cgi, где у вас будет $ _SERVER. Если вы зависаете на локальном веб-сервере, тогда будет заселен $ _SERVER.

$ cat /etc/cron.daily/mydailyphpwork
/usr/bin/curl http://domain.tld/path/to/cron-script.php &> /dev/null

Тем не менее , я думаю, вы действительно должны придерживаться решений, предлагаемых TimWolla или DerVO, если вам действительно не нужно это поведение.

Плюсы:

  • Вы получите все переменные $ _SERVER, как и ожидалось.
  • Если вам нужно переписать много кода с if-else, это может быть предпочтительным, так как вам не нужно менять какой-либо код.

Минусы:

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



Вы можете жестко закодировать значение $_SERVER[HTTP_HOST] если оно пустое, или вы можете выполнить некоторую другую проверку.




Попробуйте запустить cron job с curl .. Он заполнит ваш $ _SERVER ['HTTP_HOST'].

синтаксис linux похож на

curl http://yourdomain/yourfile.php



Когда php выполняется в командной строке, $_SERVER['HTTP_HOST'] (конечно) недоступен.

Вы можете просто подавить ошибку с помощью знака @ или немного осторожнее с помощью строки построения:

$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'CLI';