How to check with PHP if the script is being run from the console or browser request?

不羁岁月 提交于 2020-02-17 06:58:25

问题


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?


回答1:


Use php_sapi_name()

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.

For example:

$isCLI = ( php_sapi_name() == 'cli' );

You can also use the constant PHP_SAPI




回答2:


Check on http://php.net/manual/en/features.commandline.php#105568 "PHP_SAPI" Constant

<?php
if (PHP_SAPI === 'cli')
{
   // ...
}
?> 



回答3:


if ($argc > 0) {
    // Command line was used
} else {
    // Browser was used
}

$argc coounts the amount of arguments passed to the command line. Simply using php page.php, $argc will return 1

Calling page.php with a browser, $argc will return NULL




回答4:


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.




回答5:


One solution is to check whether STDIN is defined:

if (!defined("STDIN")) {
    die("Please run me from the console - not from a web-browser!");
}



回答6:


Check the HTTP_USER_AGENT , it should exist in http request



来源:https://stackoverflow.com/questions/1042501/how-to-check-with-php-if-the-script-is-being-run-from-the-console-or-browser-req

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!