我的问题是创建一个简单的php脚本,我想从命令行或浏览器调用参数:
if(!empty($_GET)) {
$parameters = $_GET;
} else if(isset($argv)) {
$parameters = $argv;
}
var_dump($parameters);
给出不同的结果:
浏览器:http://localhost/test/script.php?测试= 123
array(1) { ["test"]=> string(3) "123" }
in shell: php script.php test=123
array(2) {
[0]=>
string(10) "script.php"
[1]=>
string(8) "test=123"
}
您可以使用getopt(或getlongopt)(参见相同的手动链接)
array getopt ( string $options [, array $longopts ] )
命令行的惯用语法是:
program -o val --opt value pos_value
这种语法可以在PHP中使用getopt
进行解析。
$options = getopt("f:hp:"); var_dump($options);
如果您打算通过CLI以查询字符串格式传递所有参数(例如test=123&var=me
),请查看parse_str()
。
if(!empty($_GET)) {
$parameters = $_GET;
} else if(!empty($argv[1])) {
$parameters = parse_str($argv[1]);
}
如果有分隔,则 decze 有答案
argv
参数的第一个元素将始终是已执行的脚本的名称。您可以简单地忽略第一个参数,并从索引1
开始。
摘自相关文档:
注意:第一个参数
$argv[0]
总是用来运行脚本的名称。
正如其他人提到的,您还可以使用getopt
函数,该函数专门用于从CLI中提取选项、它们的名称和它们的值。argv
变量只是保存传递的参数列表。由于正在执行的实际程序是PHP解释器,因此甚至脚本名称也是一个参数。
php my_script.php another_arg more_args
// ^ argv[0].....^ argv[1]...^ argv[2]
作为旁注,argv
包括执行脚本文件的这种行为在其他平台/技术上是一致的。例如,同样的行为可以在python、bash、awk和许多其他语言中看到。
摘自本页的一般解释
什么是ARGV?
作为一个概念,ARGV是一种编程约定,至少可以追溯到C语言。它指的是"参数向量",它基本上是一个变量,包含通过命令行传递给程序的参数。它通常表现为一个数组,并且可以以这种方式操作,这意味着您可以通过索引引用特定的参数,或者可以以标准方式遍历它们。
我发现我可以调用我的脚本php-cgi而不是php;命令行:php-cgi script.php test=123和浏览器:http://localhost/test/script.php?test=123会得到我想要的结果。谢谢大家