Как различить запросы http и cli? - PullRequest
10 голосов
/ 31 января 2010

Название тихое и понятное.Я должен знать на стороне сервера, если скрипт вызывается через HTTP-запрос или из командной строки.Я мог бы изучить $_SERVER['argv'] или $_SERVER['argc'].
Каков прагматичный способ сделать это?

Ответы [ 6 ]

12 голосов
/ 31 января 2010

http://us3.php.net/manual/en/function.php-sapi-name.php

<?php
echo PHP_SAPI;
echo php_sapi_name();
?>
2 голосов
/ 31 января 2010

Посмотрите на ключи в $ _ SERVER . Если это cli-запрос, вы не должны видеть ни одного, начинающегося с «HTTP».


Вот простой тестовый код:

<?php

foreach( $_SERVER as $k=>$v ){
    echo "$k: $v\n";
}

?>

А вот и вывод:

aj@mmdev0:~/so$ php cli.php |grep HTTP
aj@mmdev0:~/so$
1 голос
/ 31 января 2010

Возможно, проверка не установлена ​​$_SERVER['HTTP_HOST']? Потому что я считаю, что эта переменная заполняется через заголовки запросов, отправленные в файл exection, и командная строка, вероятно, не отправляет заголовки.

0 голосов
/ 31 января 2010

Но вы все равно должны отправлять данные через http (tcp) независимо от того, вызывается ли скрипт из cli или из браузера.

0 голосов
/ 31 января 2010

Предлагаю проверить if(isset($_SERVER['SERVER_NAME']))

0 голосов
/ 31 января 2010

Вы можете проверить, установлена ​​ли глобальная переменная $argc.

...