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

时间:2012-06-15 10:20:42

标签: php parameter-passing command-line-interface

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

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

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

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

以上作品,我将Robby作为输出。

但我想做这样的事情:

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

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

8 个答案:

答案 0 :(得分:34)

从命令行调用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 =&gt;值对是否正确。但是,这有点浪费,只需指示用户输入正确的顺序即可。

答案 1 :(得分:13)

虽然答案是正确的并且您可以手动解析,但PHP还提供了getopt()函数,它实际上可能在这里提供了有用的功能。

还有一些面向对象的替代方案(用PHP编写,可在许多库中找到),可能会成为您所需要的。谷歌搜索“php getopt”将产生有用的结果。

答案 2 :(得分:12)

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

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数组

答案 3 :(得分:2)

您可以将参数作为一个参数发送,然后像$ _GET数组一样解析该参数

C:\xampp\php\php.exe name.php "inputFirstName=Robby&LastName=John"

并在您的PHP文件中

if (!empty($argv[1])) {
  parse_str($argv[1], $_GET);
}

您将像往常一样在$ _GET数组中获取参数

答案 4 :(得分:1)

version=0.0.1-SNAPSHOT 函数可能是问题中最正确的答案。特别是因为它与PHP 5.3独立于平台。在此问题的特定情况下并解析多个参数,利用此函数的一种方法如下:

getopt()

使用值&#34; Robby&#34;设置$ inputFirstName的调用。将是:

$defaultValues = array("inputFirstName" => "");
$givenArguments = getopt("", array("inputFirstName:"));
$options = array_merge($defaultValues, $givenArguments);
$inputFirstName = $options['inputFirstName'];

<强>解释

所有预期参数的默认值都在> php script.php --inputFirstName="Robby" 数组中设置。通过命令行参数发送的输入由PHP的$defaultValues函数收集并由getopt存储。请注意,$givenArguments字符串末尾的冒号(:)表示这是必需参数。这里没有冒号,只会检测到参数的存在,而不是实际值(more information in the PHP Manual)。将这两个数组合并在第三行上会产生一个数组,其中所有预期参数都设置为默认值或命令行/终端提供的参数(如果可用)。

答案 5 :(得分:0)

如果您不介意使用图书馆,我建议您查看The Console Component by Symfony

它可用于创建命令行应用程序并支持使用Arguments & Options

文档页面包含一些很好的示例,可帮助您入门。

当然,它使用了与vascowhite所解释的技术相同的技术。

答案 6 :(得分:0)

我不知道当时是否有人问这个问题我要回答什么,但是如果您调用 php-cgi -f myfile.php var=something,您可以从命令行检索 whit $var=$_GET['var']; 那么您无需更改代码即可从 Web 浏览器或命令行调用它

答案 7 :(得分:-1)

您可以解析程序中的用户输入,查找特定字符串,例如-inputFirstName="x"(例如,使用正则表达式),然后将正确的变量设置为x。