如何区分http和cli请求?

时间:2010-01-31 19:23:32

标签: php http request command-line-interface

标题很安静直截了当。我必须在服务器端知道脚本是通过HTTP请求还是通过命令行调用的。我可以检查$_SERVER['argv']$_SERVER['argc'] 什么是实用方式?

6 个答案:

答案 0 :(得分:12)

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

<?php
echo PHP_SAPI;
echo php_sapi_name();
?>

答案 1 :(得分: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$

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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