如何以与浏览器和命令行相同的方式处理php脚本
我的问题是创建一个简单的php脚本,我想用命令行或浏览器中的参数调用该脚本:如何以与浏览器和命令行相同的方式处理php脚本,php,python,bash,awk,Php,Python,Bash,Awk,我的问题是创建一个简单的php脚本,我想用命令行或浏览器中的参数调用该脚本: if(!empty($_GET)) { $parameters = $_GET; } else if(isset($argv)) { $parameters = $argv; } var_dump($parameters); 这会产生不同的结果: 在浏览器中: array(1) { ["test"]=> string(3) "123" } 在shell中:php script.php test
if(!empty($_GET)) {
$parameters = $_GET;
} else if(isset($argv)) {
$parameters = $argv;
}
var_dump($parameters);
这会产生不同的结果:
在浏览器中:
array(1) { ["test"]=> string(3) "123" }
在shell中:php script.php test=123
array(2) {
[0]=>
string(10) "script.php"
[1]=>
string(8) "test=123"
}
我想通过名称调用参数。参数的第一个元素始终是已执行脚本的名称。您可以忽略第一个参数,从索引
1
开始
摘自
注意:第一个参数$argv[0]
始终是用于运行脚本的名称
正如其他人提到的,您还可以使用专门用于从CLI提取选项、选项名称和选项有效期的。argv
变量仅保存已传递参数的列表。因为实际执行的程序是PHP解释器,所以脚本名也是一个参数
php my_script.php another_arg more_args
// ^ argv[0].....^ argv[1]...^ argv[2]
作为旁注,
argv
的这种行为(包括正在执行的脚本文件)在其他平台/技术中是一致的。例如,相同的行为可以通过,甚至更多的方式看到
一般解释取自
什么是ARGV?作为一个概念,ARGV是编程中的一种约定,至少可以追溯到C语言。它指的是“参数向量”,它基本上是一个变量,包含通过命令行传递给程序的参数。它通常表现为一个数组,可以通过这种方式进行操作,这意味着您可以通过索引引用特定的参数,也可以通过标准方式对它们进行迭代
您可以使用(或getlongopt)实现这一点(参见相同的手册链接)
array getopt(string$options[,array$longopts])
如果要通过CLI以查询字符串格式传递所有参数(例如test=123&var=me
),请查看
如果有分隔符,则deceze有。命令行的惯用语法为:
program -o val --opt value pos_value
这样的语法可以在PHP中使用进行解析
我发现我不能用php cgi而不是php调用我的脚本; CLI:php cgi script.php test=123 及 浏览器: 给出我想要的结果。 谢谢大家看看,你们就会明白为什么输出不同。要生成相同的输出,需要迭代argv[1,…],检索不同的参数,在运算符“=”上剪切它们,并将左操作数作为键插入,将右操作数作为该键的值插入关联数组中
program -o val --opt value pos_value
$options = getopt("f:hp:");
var_dump($options);