125*_*369 26 php parameter-passing command-line-interface
我想从PHP命令行界面传递参数,然后使用PHP脚本读取值,如下所示:
<?php
$name1 = $argv[1];
echo $name1;
?>
Run Code Online (Sandbox Code Playgroud)
我从CLI传递变量,如下所示:
C:\xampp\php\php.exe name.php Robby
Run Code Online (Sandbox Code Playgroud)
上面的作品,我得到了罗比作为输出.
但我想做这样的事情:
C:\xampp\php\php.exe name.php -inputFirstName="Robby"
Run Code Online (Sandbox Code Playgroud)
这样用户就可以在正确的位置输入正确的参数.解析这些参数的适当方法是什么?
vas*_*ite 35
从命令行调用PHP脚本时,您可以使用$ argc来查找传递的参数数量,并使用$ argv来访问它们.例如,运行以下脚本:
<?php
var_dump($argc); //number of arguments passed
var_dump($argv); //the arguments passed
?>
Run Code Online (Sandbox Code Playgroud)
像这样:-
php script.php arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
将给出以下输出
int(4)
array(4) {
[0]=>
string(21) "d:\Scripts\script.php"
[1]=>
string(4) "arg1"
[2]=>
string(4) "arg2"
[3]=>
string(4) "arg3"
}
Run Code Online (Sandbox Code Playgroud)
为了做你想做的事,让我们说
php script.php arg1=4
Run Code Online (Sandbox Code Playgroud)
你需要在等号上爆炸参数: -
list($key, $val) = explode('=', $argv[1]);
var_dump(array($key=>$val));
Run Code Online (Sandbox Code Playgroud)
这样你就可以在等号前面得到任何你想要的东西,而不必解析它,只需检查key =>值对是否正确.但是,这有点浪费,只需指示用户输入正确的顺序即可传递参数.
小智 13
虽然答案是正确的,并且您可以手动进行解析,但PHP还提供了getopt()可能在此实际提供的功能.
还有面向对象的替代方案(用PHP编写,可在许多库中找到),这些替代方案可能会成为您所需要的.谷歌搜索"php getopt"将产生有用的结果.
小智 13
我使用这个相当简洁的方法:
if($argc>1)
parse_str(implode('&',array_slice($argv, 1)), $_GET);
Run Code Online (Sandbox Code Playgroud)
哪个会处理如下呼叫:
php script.php item1=4 item2=300
Run Code Online (Sandbox Code Playgroud)
通过将其发送到$ _GET,您可以自动处理Web或CLI访问.
对于评论,这是做以下事情:
您可以将参数作为一个参数发送,然后像 $_GET 数组一样解析该参数
C:\xampp\php\php.exe name.php "inputFirstName=Robby&LastName=John"
Run Code Online (Sandbox Code Playgroud)
并在你的 PHP 文件中
if (!empty($argv[1])) {
parse_str($argv[1], $_GET);
}
Run Code Online (Sandbox Code Playgroud)
你会像往常一样在 $_GET 数组中获得参数
该getopt()函数可能是该问题的最正确答案。特别是因为 PHP 5.3 使得它与平台无关。在这个问题的特定情况下并解析多个参数,利用此函数的一种方法如下:
$defaultValues = array("inputFirstName" => "");
$givenArguments = getopt("", array("inputFirstName:"));
$options = array_merge($defaultValues, $givenArguments);
$inputFirstName = $options['inputFirstName'];
Run Code Online (Sandbox Code Playgroud)
将 $inputFirstName 设置为值“Robby”的调用如下:
> php script.php --inputFirstName="Robby"
Run Code Online (Sandbox Code Playgroud)
解释
所有预期参数的默认值都在数组中设置$defaultValues。通过命令行参数发送的输入由 PHPgetopt函数收集并由$givenArguments. :请注意,字符串末尾的冒号 ( )"inputFirstName:"表示这是必需的参数。如果这里没有冒号,则只会检测到参数的存在,而不是实际值(更多信息请参阅 PHP 手册)。在第三行将这两个数组合并在一起会产生数组,其中所有预期参数都使用默认值或命令行/终端提供的参数(如果可用)进行设置。
| 归档时间: |
|
| 查看次数: |
53080 次 |
| 最近记录: |