代码之家  ›  专栏  ›  技术社区  ›  erenon

如何区分HTTP和CLI请求?

  •  10
  • erenon  · 技术社区  · 16 年前

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

    6 回复  |  直到 16 年前
        1
  •  12
  •   Matthew    16 年前

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

    <?php
    echo PHP_SAPI;
    echo php_sapi_name();
    ?>
    
        2
  •  2
  •   AJ.    16 年前

    看看里面的钥匙 $_SERVER . 如果这是一个CLI请求,您不应该看到以“http”开头的任何请求。


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

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

    下面是输出:

    aj@mmdev0:~/so$ php cli.php |grep HTTP
    aj@mmdev0:~/so$
    
        3
  •  1
  •   Tyler Carter    16 年前

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

        4
  •  0
  •   Matteo Riva    16 年前

    您可以检查全局变量 $argc 被设置。

        5
  •  0
  •   Traveling Tech Guy    16 年前

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

        6
  •  0
  •   streetparade    16 年前

    但是无论如何,无论脚本是从CLI还是从浏览器调用,都必须通过HTTP(TCP)发送数据。

    推荐文章