我想从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"
以便用户能够在正确的位置输入正确的参数。解析这些参数的适当方法是什么?
答案 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"
}
要做你想做的事,让我们说
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访问。
对于评论,这是在执行以下操作:
答案 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。