我的问题是创建一个简单的php脚本,我想通过命令行或浏览器调用这个脚本:
if(!empty($_GET)) {
$parameters = $_GET;
} else if(isset($argv)) {
$parameters = $argv;
}
var_dump($parameters);
这就产生了不同的结果:
浏览器中:http://localhost/test/script.php?test=123
array(1) { ["test"]=> string(3) "123" }
在shell中:php script.php test=123
array(2) {
[0]=>
string(10) "script.php"
[1]=>
string(8) "test=123"
}
我想叫他们的名字。
发布于 2015-07-29 12:57:53
命令行的惯用语法是:
program -o val --opt value pos_value
这样的语法可以在PHP中使用getopt
解析。
$options = getopt("f:hp:");var_dump($options);
发布于 2015-07-29 12:54:51
argv
参数的第一个元素将始终是已执行的脚本的名称。您可以简单地忽略第一个参数,从索引1
开始。
摘自相关文件:
注意:第一个参数
$argv[0]
总是用于运行脚本的名称。
正如其他人所提到的,您还可以使用专门用于从CLI提取选项、名称和值的函数。argv
变量只保存传递的参数列表。因为正在执行的实际程序是PHP解释器,甚至脚本名也是一个参数。
php my_script.php another_arg more_args
// ^ argv[0].....^ argv[1]...^ argv[2]
顺便指出,argv
的这种行为--包括正在执行的脚本文件--在其他平台/技术中是一致的。例如,在python、bash、awk和许多其他方面都可以看到同样的行为。
摘自此页的一般解释
什么是ARGV? 作为一个概念,ARGV是编程中的一种惯例,可以追溯到(至少)C语言。它指的是“参数向量”,它基本上是一个变量,包含通过命令行传递给程序的参数。它通常以数组的形式显示,并且可以以这种方式操作,这意味着您可以通过索引引用特定的参数,或者可以以标准的方式迭代它们。
发布于 2015-07-29 12:56:59
如果要以查询字符串格式(例如test=123&var=me
)通过CLI传递所有参数,请查看parse_str()
。
if(!empty($_GET)) {
$parameters = $_GET;
} else if(!empty($argv[1])) {
$parameters = parse_str($argv[1]);
}
如果有分离,那么deceze就有答案。
https://stackoverflow.com/questions/31700839
复制相似问题