gpt4 book ai didi

php - 使用 getopt 捕获意外选项

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:39 24 4
gpt4 key购买 nike

我正在编写一个 PHP 脚本并且必须获得一些选项(h、n 和 v)。对我来说,获得它的最好方法是使用 getopt 函数。此外,如果传递了意外选项,我想显示帮助消息。但是,getopt 函数只返回期望的选项。

这是我的脚本:

$options = getopt('hnv');

if (!empty($options)) {
foreach (array_keys($options) as $option) {
switch ($option) {
// Run script.
case 'n':
case 'v':
break;
case 'h':
// Display help with OK exit code.
self_usage();
exit(0);
default:
// Display help with ERR exit code.
self_usage('Too many params');
exit(1);
}
}
}

但是,如果我使用 -p 等意外选项启动我的脚本,它会运行,因为选项数组是空的。

php myscript.php -p

如果我将一个意想不到的选项传递给一个预期的选项,它也会运行。

php myscript.php -pn
php myscript.php -p -n

我试图检查传递的参数计数,但这只有在我一个一个地传递参数(-n -p)而不是一个一个地传递参数(-np)。

if ((count($argv) - 1) > count($options)) {
self_usage();
}

在所有这种情况下,是否有检查未异常(exception)选项的好方法?

感谢您的帮助!

最佳答案

您可以尝试以下方法:

// remove script called
unset($argv[0]);
$valid_opts = getopt('hnv');
array_walk($argv, function(&$value, $key) {
// get rid of not opts
if(preg_match('/^-.*/', $value)) {
$value = str_replace('-', '', $value);
} else {
$value = '';
}

});
$argv = array_filter($argv);
print_r($argv);
print_r($valid_opts);

print_r(array_diff($argv, array_keys($valid_opts)));

array_diff 将为您提供数组中无效的选项。

关于php - 使用 getopt 捕获意外选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com