好的,所以PHP有一个内置的getopt()函数,它可以返回用户提供的程序选项的信息。只是,除非我错过了什么,否则它完全失效了!从手册中可以看到:
选项的解析将在第一个找到的非选项处结束,其后跟随的任何内容都将被丢弃。
所以getopt()
函数返回一个包含有效和已解析选项的数组。您仍然可以通过查看未修改的$argv
来查看整个原始命令行,但是如果您想将命令行的剩余部分视为其他内容(例如文件名),您该如何告诉getopt()
停止解析参数的位置?这是必须知道的。
以下是一个例子...
假设我想设置一个脚本来接受以下参数:
Usage: test [OPTION]... [FILE]...
Options:
-a something
-b something
-c something
那么我可能会像这样调用getopt()
:
$args = getopt( 'abc' );
如果我按照以下方式运行脚本:
$ ./test.php -a -bccc file1 file2 file3
我预计会收到以下数组返回:
Array
(
[a] =>
[b] =>
[c] => Array
(
[0] =>
[1] =>
[2] =>
)
)
所以问题在于:我怎么可能知道这三个未解析的、非选项的
FILE
参数是从$argv[3]
开始的呢?
$argv[count($argv) - 1]
。 - EaterOfCode$argv
元素,只留下非选项参数:preg_grep('/^-/', $argv, PREG_GREP_INVERT)
。 - Quinn Comendant$argv = array_values(preg_grep('/^-/', $argv, PREG_GREP_INVERT));
- Quinn Comendant