在 PHP 中,如何检测执行是从 CLI 模式还是通过浏览器? [复制]

Posted

技术标签:

【中文标题】在 PHP 中,如何检测执行是从 CLI 模式还是通过浏览器? [复制]【英文标题】:In PHP, how to detect the execution is from CLI mode or through browser ? [duplicate] 【发布时间】:2010-12-31 18:31:12 【问题描述】:

我有一个通用脚本,它包含在我的 phpcron 文件和通过浏览器访问的文件中。代码的某些部分,我只需要非 cron 文件。我如何检测执行是来自 CLI 还是通过浏览器(我知道可以通过使用 cron 文件传递​​一些参数来完成,但我无权访问 crontab)。有没有其他办法?

【问题讨论】:

【参考方案1】:

使用php_sapi_name() 函数。

if (php_sapi_name() == "cli") 
    // In cli-mode
 else 
    // Not in cli-mode

以下是文档中的一些相关说明:

php_sapi_name — 返回 web 服务器和 PHP 之间的接口类型

虽然并不详尽,但可能的返回值包括 aolserver、apache、apache2filter、apache2handler、caudium、cgi(PHP 5.3 之前)、cgi-fcgi、cli、cli-server、continuity、embed、isapi、litespeed、milter、nsapi 、phttpd、pi3web、roxen、thttpd、tux 和 webjames。

【讨论】:

+1 是唯一正确的方法。 PHP_SAPI 也可以用于此,因此它并不是唯一正确的方法 这曾经是一个仅链接的答案,直到有人复制了@Linus Unnebäck 的答案。坏习惯!否决这个,赞成另一个...... @GottliebNotschnabel 谢谢!看到这种情况很烦人。 捏别人的帮助,啧啧啧。真的不是很厉害,伙计。【参考方案2】:
if(php_sapi_name() == "cli") 
    //In cli-mode
 else 
    //Not in cli-mode

【讨论】:

【参考方案3】:

有一个常量PHP_SAPIphp_sapi_name() 具有相同的值。

(在 PHP >= 4.2.0 中可用)

【讨论】:

这是最好的办法!【参考方案4】:

我认为您可以从 $_SERVER 变量中看到它。尝试打印出浏览器和 CLI 的 $_SERVER 数组,您应该会看到差异。

【讨论】:

这可能是真的,但可能不是确定正在使用的接口的可靠方法。检查的正确方法是使用php_sapi_name()【参考方案5】:

你可以使用:

if (isset($argc))

    // CLI

else

    // NOT CLI

【讨论】:

-1 - $argc 可以在应用程序中设置,不是吗?不是可靠的方法。一次花了我半天的时间。 php_sapi_name() 是我知道的唯一好方法。 $argv / $argc 也可以在某些配置中填充 GET 变量! $argc 可以在设置中禁用(未注册),即使是控制台应用程序

以上是关于在 PHP 中,如何检测执行是从 CLI 模式还是通过浏览器? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PHP多进程初步

PHP CLI 模式详解

(PHP)如何检测用户的计算机/浏览器是否处于黑暗模式?

PHP CLI - 检测我的内存浪费在哪里

在React中,如何检测我的组件是从客户端还是服务器呈现?

如何检测网页是从网站还是本地文件系统运行