Как проверить с помощью PHP, запускается ли скрипт из консоли или по запросу браузера?
Я пробовал такие вещи, как $_ENV [‘CLIENTNAME’] == ‘Консоль’, но, похоже, работает только с определенной ОС (работает в Windows, а не в Linux).
Я попытался! Пусто ($ _ ENV [‘SHELL]), но это тоже не работает.
Есть ли способ проверить это, что будет работать во всех ОС/средах?
6 ответов
Возвращает строчную строку, которая описывает тип интерфейса ( Server API, SAPI), который использует PHP. Например, в CLI PHP эта строка будет «cli», тогда как с Apache it может иметь несколько разных значений в зависимости от точного SAPI.
Вы также можете использовать константу PHP_SAPI
Я знаю, что это старый вопрос, но для записи я вижу HTTP-запросы, входящие без заголовка User-Agent, и PHP в этом случае автоматически не определяет HTTP_USER_AGENT.
Как определить, запущен ли скрипт в консоли?
Корректный метод определения способа запуска скрипта вглядит так:
Константа PHP_SAPI
PHP_SAPI (string) — Серверное API данной сборки PHP. В данной константе хранится то же значение, что возвращает функция php_sapi_name() .
php_sapi_name()
string php_sapi_name ( void ) — Возвращает тип интерфейса между веб-сервером и PHP
Описание
Возвращает строку в нижнем регистре, содержащую описание типа интерфейса (Server API, SAPI) которым пользуется PHP. Например, в CLI PHP эта строка примет значение «cli», в то время как с Apache может быть несколько разных значений в зависимости от конкретного SAPI.
Возвращаемые значения
Возвращает тип интерфейса в виде строки в нижнем регистре.
Возможные возвращаемые значения (список может быть неполным): aolserver, apache, apache2filter, apache2handler, caudium, cgi (до PHP 5.3), cgi-fcgi, cli, cli-server, continuity, embed, fpm-fcgi, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux, и webjames.
Как определить, запущен ли PHP из командной строки?
Работа PHP скрипта из командной строки накладывает определенные ограничения на его программирование и обработку ошибок.
В частности отсутствие $_SERVER может приводить к ошибкам и изменению логики работы:
PHP Notice: Undefined index: REQUEST_URI in .
Существует два способа определить, запущен ли PHP из командной строки:
- При запуске из командной строки функция «php_sapi_name» возвращает значение «cli», при запуске в качестве CGI-модуля «cgi» или «fast-cgi», и имя сервера — если как модуль apache.
$sapi = php_sapi_name(); if ($sapi==’cli’) echo ‘Запуск из командной строки’; elseif (substr($sapi,0,3)==’cgi’) echo ‘Запуск в режиме CGI’; elseif (substr($sapi,0,6)==’apache’) echo ‘Запуск в режиме модуля Apache’; else echo ‘Запуск в режиме модуля сервера ‘.$sapi;
How to check with PHP if the script is being run from the console or browser request?
I tried things like $_ENV[‘CLIENTNAME’] == ‘Console’ but that seems to work on only certain OS’s (worked in windows, not linux).
I tried !empty($_ENV[‘SHELL’]) but that doesn’t work always either.
Is there a way to check this that will work in all OS’s/environments?
6 Answers 6
Returns a lowercase string that describes the type of interface (the Server API, SAPI) that PHP is using. For example, in CLI PHP this string will be "cli" whereas with Apache it may have several different values depending on the exact SAPI used.
You can also use the constant PHP_SAPI
I know this is an old question, but for the record, I see HTTP requests coming in without a User-Agent header and PHP does not automatically define HTTP_USER_AGENT in this case.