我想从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"
这样用户灵通在正确的位置输入正确的参数。 什么是解析这些参数的适当方法?
当从命令行调用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));
无论你在等号前想而不必解析它,只是检查钥匙这样,你可以有=> value对是否正确。 然而,这一切都有点浪费,只是指导用户正确的顺序来传递参数上。
虽然答案是正确的,你可以做手工解析,PHP还提供getopt()
函数,它实际上可能提供有用这里。
还有面向对象的替代品(用PHP编写的,可在多个库),可能变成是你所需要的。 谷歌搜索“PHP getopt的”将产生有益的结果。
我用这个相当简洁的方法:
if($argc>1)
parse_str(implode('&',array_slice($argv, 1)), $_GET);
这将处理呼叫,例如:
php script.php item1=4 item2=300
通过发送到$ _GET您自动处理Web或CLI访问。
对于评论,这是做了以下内容:
- 如果参数的数量大于一(作为第一项是脚本的名称)进行
- 抓斗的参数阵列不包括第一项
- 把它变成与&号标准的查询字符串格式
- 使用parse_str解压到$ _GET数组
该getopt()
函数可能是问题的情况下,最正确的答案。 特别是由于它是由独立于平台与PHP 5.3。 在这个问题上和解析多个参数,利用这一功能将是如下一种方式的具体情况:
$defaultValues = array("inputFirstName" => "");
$givenArguments = getopt("", array("inputFirstName:"));
$options = array_merge($defaultValues, $givenArguments);
$inputFirstName = $options['inputFirstName'];
呼叫设置$ inputFirstName值为“罗比”将是:
> php script.php --inputFirstName="Robby"
说明
所有预期参数的默认值的设定中$defaultValues
阵列。 通过输入由PHP的收集命令行参数发送通过getopt
功能和存储$givenArguments
。 注意,冒号( :
在结束时) "inputFirstName:"
字符串表示这是必需的参数。 这里没有一个冒号,只是说法的存在将被检测,而不是实际值( PHP手册中的详细信息 )。 在第三行这两个数组合并在一起导致阵列与所有预期参数被设置与任一默认值或通过命令行/终端提供它们是否可用的参数。
如果你不介意使用图书馆,我建议你看一看控制台部件由Symfony的 。
它可以用来创建命令行应用程序和支持使用参数和选项 。
文档页面包含了两个很好的例子让你开始。
引擎盖下当然它使用由vascowhite解释相同的技术。
您可以分析你的程序查找特定的字符串,例如用户输入-inputFirstName="x"
(使用正则表达式,例如),然后设置正确的变量为x。