我正在尝试写下一个脚本来获取一些在线数据;脚本应该由 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。
答案 0 :(得分:15)
手册没有说明这一点,但是,如果您希望{0}},$_SERVER['argc']
,$_SERVER['argv']
,$argc
在您未参加时注册$argv
模式,然后需要在php.ini中启用CLI
值register_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.php和parse_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'];
}