如果脚本是从控制台或浏览器请求运行的,如何使用 PHP 检查?

Posted

技术标签:

【中文标题】如果脚本是从控制台或浏览器请求运行的,如何使用 PHP 检查?【英文标题】:How to check with PHP if the script is being run from the console or browser request? 【发布时间】:2010-11-05 18:19:23 【问题描述】:

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

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

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

【问题讨论】:

欺骗***.com/questions/607373/… 【参考方案1】:

使用php_sapi_name()

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

例如:

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

你也可以使用常量PHP_SAPI

【讨论】:

【参考方案2】:

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

<?php
if (PHP_SAPI === 'cli')

   // ...

?> 

【讨论】:

【参考方案3】:

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

【讨论】:

已经在下面的评论中提到了,你不能依赖 HTTP_USER_AGENT 因为它是一个可选的头部。 您是否对我的回答投了反对票,然后发表评论说与我所说的完全相同,尼克?好的。 5 年前,当我发表此评论时,我的意思是告诉 OP HTTP_USER_AGENT 不可靠。 哦,哇,显然我看错了。提醒不要在困倦时浏览 SO。您能否稍微修改一下您的答案,以便我可以更改投票?对此感到抱歉。【参考方案4】:
if ($argc > 0) 
    // Command line was used
 else 
    // Browser was used

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

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

$_SERVER 中有各种各样的变量都在同一个想法下工作。 用户代理是可选的。我不会依赖它,因为有更好的解决方案

以上是关于如果脚本是从控制台或浏览器请求运行的,如何使用 PHP 检查?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定每个 HTTP 请求的来源

使用 jQuery 发出同步请求时,如何防止浏览器锁定(或显示等待符号)?

HTTP访问控制

我们如何知道函数是从控制台调用还是从源代码调用

如何在使用Google的脚本加载器时设置API密钥?

如何在Unix控制台或Mac终端上运行shell脚本?