Как определить, загружен ли файл PHP через cron / command line

Мне нужно определить, загружается ли файл PHP через cron или в командной строке кода. Как я могу это сделать?

Если у вас есть контроль над cron или командой, считаете ли вы, что передаете аргумент командной строки и читаете его с помощью $_SERVER['argv'][0] ?

 * * * * * /usr/bin/php /path/to/script --cron 

В сценарии:

 <?php if(isset($_SERVER['argv'][0]) and $_SERVER['argv'][0] == '--cron') $I_AM_CRON = true; else $I_AM_CRON = false; 

Это простой способ. Некоторые элементы массива $_SERVER устанавливаются только при вызове из HTTP. Таким образом, вы можете:

 if(!isset($_SERVER['REQUEST_METHOD'])){ // from cron or command line }else{ // from HTTP } 

Другие включают: $_SERVER['HTTP_HOST']

Самый надежный и исчерпывающий способ проверить, где работает ваш скрипт, известен мне

php_sapi_name ()

Тем не менее ни тот, ни какой-либо из перечисленных выше перечисленных методов не даст вам различия между «обычным» режимом CLI и вызовом cron. Идея аргумента командной строки gahooa, вероятно, является лучшим и самым надежным решением.

Вы можете проверить константу PHP_SAPI чтобы проверить, используется ли интерпретатор CLI:

$is_cli= PHP_SAPI == 'cli';