11

标题很简单明了。我必须在服务器端知道脚本是通过 HTTP 请求还是通过命令行调用的。我可以检查$_SERVER['argv']or $_SERVER['argc']
这样做的务实方法是什么?

4

6 回答 6

14

http://us3.php.net/manual/en/function.php-sapi-name.php

<?php
echo PHP_SAPI;
echo php_sapi_name();
?>
于 2010-01-31T19:29:23.860 回答
2

查看$_SERVER中的键。如果是 cli 请求,您应该看不到任何以“HTTP”开头的请求。


下面是一些简单的测试代码:

<?php

foreach( $_SERVER as $k=>$v ){
    echo "$k: $v\n";
}

?>

这是输出:

aj@mmdev0:~/so$ php cli.php |grep HTTP
aj@mmdev0:~/so$
于 2010-01-31T19:27:25.017 回答
1

可能检查是否$_SERVER['HTTP_HOST']设置了否?因为我相信该变量是通过在执行时发送到文件的请求标头填充的,并且命令行可能不会发送标头。

于 2010-01-31T19:27:26.837 回答
0

您可以检查是否$argc设置了全局变量。

于 2010-01-31T19:28:03.093 回答
0

我建议检查if(isset($_SERVER['SERVER_NAME']))

于 2010-01-31T19:28:22.500 回答
0

但是无论脚本是从 cli 还是从浏览器调用,您都必须通过 http (tcp) 发送数据

于 2010-01-31T19:29:11.957 回答