Как наиболее правильно проверить, выполняется ли ваш PHP заданием Cron или HTTP-запросом? - PullRequest
2 голосов
/ 01 марта 2012

Сейчас я делаю что-то вроде этого:

if (empty($_SERVER['SERVER_NAME'])) {
  // the script is run by a Cron job
} else {
  // the script is run by a HTTP request
}

В какой-то ситуации это пойдет не так? В частности, всегда ли Apache устанавливает $ _SERVER ['SERVER_NAME']? Я знаю, что некоторые переменные в $ _SERVER, такие как $ _SERVER ['REMOTE_ADDR'], могут быть испорчены на стороне клиента.

Любой совет?

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Создание двух отдельных сценариев будет моим первым предложением.

Также $ _SERVER ['SERVER_NAME'] зависит от настроек сервера, но всегда должен быть установлен.

Из документов Apache:

Если имя сервера не указано, то сервер пытается определить имя хоста, выполнив обратный поиск по IP-адресу.Если в ServerName порт не указан, сервер будет использовать порт из входящего запроса.Для оптимальной надежности и предсказуемости вы должны указать явное имя хоста и порт, используя директиву ServerName.

0 голосов
/ 01 марта 2012

Попробуйте встроенную функцию PHP php_sapi_name Возвращает тип интерфейса между веб-сервером и PHP

или вы можете использовать

__FILE__   with dirname(__FILE__) or 
$_SERVER['SCRIPT_NAME']

для определения пути к текущему исполняемому скрипту php. Сохраните это в переменной и примените команду linux grep, чтобы проверить, существует ли она в расположении cron /usr/etc/crontab

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