Название довольно простое. Я должен знать на стороне сервера, вызывается ли скрипт через HTTP-запрос или из командной строки. Я мог бы проверить $_SERVER['argv']
или $_SERVER['argc']
.
Каков практичный способ сделать это?
Как отличить запросы http и cli?
Ответы (6)
http://us3.php.net/manual/en/function.php-sapi-name.php
<?php
echo PHP_SAPI;
echo php_sapi_name();
?>
person
Matthew
schedule
31.01.2010
+1 Это путь. У меня были проблемы с проверкой переменных $_SERVER и тому подобного. Этот всегда работает.
- person Pekka; 31.01.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$
person
AJ.
schedule
31.01.2010
Нет необходимости в цикле, когда вы можете просто проверить одно значение.
- person Matteo Riva; 31.01.2010
@kemp, вопрос ОП специально задавал альтернативы argc
- person AJ.; 31.01.2010
Возможно, проверить, не установлен ли $_SERVER['HTTP_HOST']
? Потому что я считаю, что эта переменная заполняется через заголовки запроса, отправляемые в файл при выполнении, а командная строка, вероятно, не отправляет заголовки.
person
Tyler Carter
schedule
31.01.2010
Вы можете проверить, установлена ли глобальная переменная $argc
.
person
Matteo Riva
schedule
31.01.2010
Я предлагаю проверить if(isset($_SERVER['SERVER_NAME']))
person
Traveling Tech Guy
schedule
31.01.2010
Я не уверен, что это не установлено. Это может быть, особенно если вы выполняете свой файл PHP удаленно.
- person Tyler Carter; 31.01.2010
Я думаю, что массив $_SERVER зарезервирован для транзакций HTTP, но вы можете быть правы. Все же стоит пройтись по различным членам в нем, так как я уверен, что они различаются между локальным и удаленным исполнением.
- person Traveling Tech Guy; 31.01.2010
Но вы все равно должны отправлять данные через http (tcp), независимо от того, вызывается ли скрипт из cli или из браузера.
person
streetparade
schedule
31.01.2010