49

我尝试了诸如 $_ENV['CLIENTNAME'] == 'Console' 之类的东西,但这似乎只适用于某些操作系统(适用于 windows,而不适用于 linux)。

我试过 !empty($_ENV['SHELL']) 但这并不总是有效......

有没有办法检查这将在所有操作系统/环境中工作?

4

6 回答 6

87

采用php_sapi_name()

返回描述 PHP 正在使用的接口类型(服务器 API、SAPI)的小写字符串。例如,在 CLI PHP 中,此字符串将是“cli”,而在 Apache 中,它可能具有几个不同的值,具体取决于所使用的确切 SAPI。

例如:

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

您还可以使用常量PHP_SAPI

于 2009-06-25T07:09:36.107 回答
15

检查http://php.net/manual/en/features.commandline.php#105568 "PHP_SAPI" 常量

<?php
if (PHP_SAPI === 'cli')
{
   // ...
}
?> 
于 2016-09-01T07:41:35.080 回答
3

我知道这是一个老问题,但为了记录,我看到 HTTP 请求没有 User-Agent 标头进入,并且 PHP 在这种情况下不会自动定义 HTTP_USER_AGENT。

于 2011-07-07T19:20:02.770 回答
2
if ($argc > 0) {
    // Command line was used
} else {
    // Browser was used
}

$argc 计算传递给命令行的参数数量。只需使用 php page.php,$argc 将返回 1

用浏览器调用page.php,$argc会返回NULL

于 2014-10-09T13:45:21.387 回答
1

一种解决方案是检查是否定义了 STDIN:

if (!defined("STDIN")) {
    die("Please run me from the console - not from a web-browser!");
}
于 2014-01-23T06:32:02.893 回答
-2

检查 HTTP_USER_AGENT ,它应该存在于 http 请求中

于 2009-06-25T07:01:43.173 回答