有没有办法知道一个PHP脚本是在CLI模式下运行的?

32 浏览
0 Comments

有没有办法知道一个PHP脚本是在CLI模式下运行的?

或者反过来说,有没有办法知道一个 PHP 脚本是否在 Web 服务器内运行?

0
0 Comments

有没有办法知道一个php脚本是否在cli模式下运行?

可以通过检查$_SERVER变量来判断...例如:

$_SERVER['SERVER_ADDR']

如果不通过web服务器执行,这个变量将为空。

虽然这通常是正确的,但是可以通过CLI绕过这个限制:SERVER_ADDR=test php -r 'var_dump($_SERVER["SERVER_ADDR"]);'

0
0 Comments

PHP脚本是否在CLI模式下运行的方法:

通常情况下,在CLI模式下运行时,超全局变量$argv$argc会被设置,而$_SERVER中的许多典型内容(例如请求方法)将不可用。此外,预定义的控制台流,如STDINSTDOUTSTDERR将被设置。

要检查PHP脚本是否在CLI模式下运行,可以使用以下方法:

if (php_sapi_name() === 'cli') {
    // 脚本在CLI模式下运行
} else {
    // 脚本不在CLI模式下运行
}

上述代码使用php_sapi_name()函数来获取服务器API名称,如果返回值为'cli',则表示脚本在CLI模式下运行。

另一种方法是检查$argc$argv是否被设置。这两个变量在CLI模式下会被自动设置为脚本的命令行参数数量和参数数组。

if (isset($argc) && isset($argv)) {
    // 脚本在CLI模式下运行
} else {
    // 脚本不在CLI模式下运行
}

通过检查$argc$argv是否被设置,可以确定脚本是否在CLI模式下运行。

这些方法可以帮助开发者确定PHP脚本是否在CLI模式下运行,从而根据需要执行相应的操作。

0
0 Comments

从上面的内容中,我们可以看出这个问题的出现原因是因为有人想知道如何判断一个PHP脚本是在CLI模式下运行。解决方法是使用php_sapi_name()函数来获取当前PHP脚本的运行模式,并与'cli'进行比较来判断是否在CLI模式下运行。

根据给出的代码和相关说明,我们可以整理成如下的文章:

PHP脚本是一种通用的脚本语言,可以在不同的环境中运行,比如Web服务器、命令行等。有时候我们可能需要判断当前的PHP脚本是在什么模式下运行,特别是需要在CLI模式下执行一些特定的操作。

要判断一个PHP脚本是否在CLI模式下运行,可以使用php_sapi_name()函数。这个函数会返回当前PHP脚本的运行模式。我们可以将返回值与'cli'进行比较,如果相等则表示当前脚本在CLI模式下运行。

以下是一个示例的代码:

function is_cli()
{
    return php_sapi_name() === 'cli';
}

以上代码中的is_cli()函数可以用来判断当前PHP脚本是否在CLI模式下运行。函数内部使用php_sapi_name()函数来获取当前脚本的运行模式,并将返回值与'cli'进行比较。如果相等,则函数返回true,表示当前脚本在CLI模式下运行;否则返回false,表示当前脚本不在CLI模式下运行。

需要注意的是,php_sapi_name()函数的返回值可能不止'cli',根据PHP官方文档的说明,可能的返回值包括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等。因此,判断当前脚本是否在CLI模式下运行,可以使用以下代码:

function is_cli()
{
    $sapi = php_sapi_name();
    return in_array($sapi, ['cli', 'cli-server']);
}

以上代码中的is_cli()函数将php_sapi_name()的返回值存储在变量$sapi中,并使用in_array()函数来判断$sapi是否在['cli', 'cli-server']的数组中。如果在数组中,则表示当前脚本在CLI模式下运行。

通过使用php_sapi_name()函数和相关的代码,我们可以方便地判断一个PHP脚本是否在CLI模式下运行,从而执行一些特定的操作。

0