Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以与浏览器和命令行相同的方式处理php脚本_Php_Python_Bash_Awk - Fatal编程技术网

如何以与浏览器和命令行相同的方式处理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

我的问题是创建一个简单的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=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);