PHP,将参数从命令行传递到 PHP 脚本

我想从PHP命令行界面传递参数,然后使用PHP脚本读取值,如下所示:

<?php
  $name1 = $argv[1];    
  echo $name1;
?>

我从 CLI 传递变量,如下所示:

C:\xampp\php\php.exe name.php Robby

以上有效,我得到罗比作为输出。

但我想做这样的事情:

C:\xampp\php\php.exe name.php -inputFirstName="Robby"

以便用户充分了解在正确的位置输入正确的参数。解析这些参数的适当方法是什么?


答案 1

从命令行调用 PHP 脚本时,可以使用 $argc 找出传递了多少个参数,$argv来访问它们。例如,运行以下脚本:

<?php
    var_dump($argc); //number of arguments passed 
    var_dump($argv); //the arguments passed
?>

像这样:-

php script.php arg1 arg2 arg3

将给出以下输出

int(4)
array(4) {
  [0]=>
  string(21) "d:\Scripts\script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}

有关更多详细信息,请参阅$argv和$argc

为了做你想做的事,让我们说

php script.php arg1=4

你需要在等号上分解论点:-

list($key, $val) = explode('=', $argv[1]);
var_dump(array($key=>$val));

这样,您就可以在等号前面找到任何您想要的东西,而不必解析它,只需检查key=>值对是否正确即可。但是,这都是一种浪费,只需指示用户以正确的顺序传递参数即可。


答案 2

我使用这个相当简洁的方法:

if($argc>1)
  parse_str(implode('&',array_slice($argv, 1)), $_GET);

这将处理如下调用:

php script.php item1=4 item2=300

通过将其发送到 $_GET,您可以自动处理 Web 或 CLI 访问。

对于评论,这是执行以下操作:

  • 如果参数计数大于 1(因为第一项是脚本的名称),则继续
  • 获取不包括第一项的参数数组
  • 将其转换为带有 & 符号的标准查询字符串格式
  • 使用 parse_str 提取到 $_GET 数组

推荐