Как определить, загружен ли файл PHP через cron / командную строку - PullRequest
9 голосов
/ 06 декабря 2009

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

Ответы [ 4 ]

16 голосов
/ 06 декабря 2009

Если у вас есть контроль над 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;
6 голосов
/ 06 декабря 2009

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

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

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

6 голосов
/ 06 декабря 2009

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

php_sapi_name ()

Однако ни этот, ни другие перечисленные методы, перечисленные здесь, не дадут вам различия между "обычным" режимом CLI и вызовом cron. Идея аргумента командной строки gahooa, вероятно, является лучшим и наиболее надежным решением.

2 голосов
/ 06 декабря 2009

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

$is_cli= PHP_SAPI == 'cli';

...