Я хочу запустить работу cron. Мое приложение разработано в PHP и Mysql.
В браузере, если я использую $_SERVER[HTTP_HOST]
в кодировании, он отлично работает. Но если я использую то же самое в работе cron, он дает ошибки.
Может ли какой-нибудь орган дать предложение исправить это?
$_SERVER['HTTP_HOST']
не заполняется при запуске из cronjob, к файлу не обращается через HTTP.
Вам придется либо жестко закодировать хост, либо передать его с помощью аргумента командной строки и получить доступ к нему через $_SERVER['argv']
.
Когда php выполняется в командной строке, $_SERVER['HTTP_HOST']
(конечно) недоступен.
Вы можете просто подавить ошибку с помощью знака @
или немного осторожнее с помощью строки построения:
$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'CLI';
Как было сказано ранее, $ _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, если вам действительно не нужно это поведение.
Плюсы:
Минусы:
Попробуйте запустить cron job с curl .. Он заполнит ваш $ _SERVER ['HTTP_HOST'].
синтаксис linux похож на
curl http://yourdomain/yourfile.php
Вы можете жестко закодировать значение $_SERVER[HTTP_HOST]
если оно пустое, или вы можете выполнить некоторую другую проверку.