Мне нужно определить, загружается ли файл 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';