Php 如何区分http和cli请求?
标题非常直白。我必须知道服务器端的脚本是通过HTTP请求调用的还是通过命令行调用的。我可以检查Php 如何区分http和cli请求?,php,http,request,command-line-interface,Php,Http,Request,Command Line Interface,标题非常直白。我必须知道服务器端的脚本是通过HTTP请求调用的还是通过命令行调用的。我可以检查$\u服务器['argv']或$\u服务器['argc'] 实用的方法是什么?查看中的键。如果是cli请求,则不应看到任何以“HTTP”开头的请求 下面是一些简单的测试代码: <?php foreach( $_SERVER as $k=>$v ){ echo "$k: $v\n"; } ?> 可能正在检查是否未设置$\u服务器['HTTP\u主机]?因为我相信变量是通过
$\u服务器['argv']
或$\u服务器['argc']
实用的方法是什么?查看中的键。如果是cli请求,则不应看到任何以“HTTP”开头的请求
下面是一些简单的测试代码:
<?php
foreach( $_SERVER as $k=>$v ){
echo "$k: $v\n";
}
?>
可能正在检查是否未设置
$\u服务器['HTTP\u主机]
?因为我相信变量是通过执行时发送到文件的请求头填充的,命令行可能不发送头。您可以检查全局变量$argc
是否已设置。我建议检查如果(isset($\u SERVER['SERVER\u NAME'))
但您必须通过http(tcp)发送数据无论如何,无论是从cli还是从浏览器调用脚本
我不确定这是否未设置。可能是这样,尤其是当您远程执行PHP文件时。我认为$\u服务器阵列是为HTTP事务保留的,但您可能是对的。它仍然值得浏览其中的各种成员,因为我确信它们在本地执行和远程执行之间有所不同。+1这是一条路要走。我在检查$\u服务器变量之类的东西时遇到了问题。这一个总是有效的。当你可以只测试一个值时,就不需要循环了。@kemp,OP的问题特别询问了argc的替代方案
aj@mmdev0:~/so$ php cli.php |grep HTTP
aj@mmdev0:~/so$
<?php
echo PHP_SAPI;
echo php_sapi_name();
?>