在要从命令行使用的PHP脚本中:
据我所知,函数getopt()只允许处理命名的'参数,例如:$args = getopt("h:m:");
将允许使用如下定义的参数运行脚本:
./script.php -h24 -m60;
但是如何得到第一个(第二个,第三个......)未命名的参数,例如:
./script -h24 -m60 additional_argument_1 "argument 2";
$_SERVER['argv']
允许获取所有参数但是根据所使用的(可选)命名参数的数量,它不能直接获得第一个未命名的参数。
如何轻松获取additional_argument_1和可选的第二个未命名参数的值?
答案 0 :(得分:0)
我会将getopt与argv结合使用。这将为您提供一个良好的开端:
<?php
print_r($argc);
print_r($argv);
$getopt = getopt("a::b::c::");
$optionals = array();
// Get all arguments delivered
foreach ($argv as $key1=>$value1) {
// Skip the filename
if ($key1 == 0) {
continue;
}
$match = false;
// Compare to each argument recognized by getopt
foreach ($getopt as $key2=>$value2) {
if ("-".$key2.$value2 === $value1 || "--".$key2.$value2 === $value1) {
$match = true;
break;
}
}
// If it was not recognized by getopt, it is an optional. Keep it.
if (!$match) {
$optionals[] = $value1;
}
}
print_r($optionals);
?>
您可以通过以下方式启动它:
php getopt.php -aarg -c optional1 optional2 optional3
它会回答:
Array
(
[0] => optional1
[1] => optional2
[2] => optional3
)
此外,这里有一些非常有趣的建议: Run php script from command line with variable
但您可能想要使用多个未命名的选项重新考虑您的设计。此外,示例代码可以重构为使用回调的PHP数组函数的增强使用,或者将内部循环提取到函数中。但这是一个良好的开端。
答案 1 :(得分:0)
也许您可以简单地在$argv
中查找不以破折号开头的参数:
<?php
/**
* Get all arguments that does not start with - or --
*
* @return array
*/
function unnamed_arguments() {
$args = [];
foreach( $GLOBALS[ 'argv' ] as $arg ) {
if( '-' !== $arg[ 0 ] ) {
$args[] = $arg;
}
}
array_shift( $args ); // discard the name of your script
return $args;
}
var_dump( unnamed_arguments() );
注意:如果您还有其他诸如--name value
之类的值,则不能使用此方法。对于带有值的参数,应改为使用语法--name=value
。