带有HTTP GET和CLI问题的$ _SERVER ['argv']

时间:2012-02-14 00:16:41

标签: php get query-string command-line-interface

我正在尝试写下一个脚本来获取一些在线数据;脚本应该由 cron作业或php cli 以及标准 GET HTTP请求调用。正如PHP网站上所述,$_SERVER['argv']应该符合我的需求:

  

传递给脚本的参数数组。当脚本运行时   命令行,这提供了对命令行的C风格访问   参数。当通过GET方法调用时,它将包含   查询字符串。

但是我无法使用标准的HTTP GET请求。 $_SERVER['argv']未设置。我错过了什么?

<?php
    // jobs/fetch.php
    var_dump($_SERVER['argv']);
?>

CLI输出 php jobs/fetch.php -a -bhello

array(3) {
  [0]=>
  string(14) "jobs/fetch.php"
  [1]=>
  string(2) "-a"
  [2]=>
  string(7) "-bhello"
}

获取输出 jobs/fetch.php?a=&b=hello

  

注意:未定义的索引:jobs / fetch.php中的argv。

2 个答案:

答案 0 :(得分:15)

手册没有说明这一点,但是,如果您希望{0}},$_SERVER['argc']$_SERVER['argv']$argc在您未参加时注册$argv模式,然后需要在php.ini中启用CLIregister_argc_argv(默认情况下已关闭[出于性能原因])。

您可以执行以下操作来获取php.ini,或根据脚本的运行方式查询字符串参数:

argv

以下是if (php_sapi_name() == 'cli') { $args = $_SERVER['argv']; } else { parse_str($_SERVER['QUERY_STRING'], $args); } 的一些细节:

php.ini

另请参阅http://www.php.net/manual/en/reserved.variables.argv.phpparse_str()

答案 1 :(得分:3)

您必须使用$_GET $_SERVER['argv'],具体取决于脚本的调用方式。两者都没有用。

例如:

if(!empty($_SERVER['argv'][0]) {
  $a = $_SERVER['argv'][1];
  $b = $_SERVER['argv'][2];
} else {
  $a = $_GET['a'];
  $b = $_GET['b'];
}