ОК, поэтому у PHP есть встроенная функция getopt(), которая возвращает информацию о том, какие параметры программы предоставил пользователь. Только, если я что-то не упустил, он полностью разорвался! Из руководства:
Анализ синтаксического разбора завершится с первой найденной опцией, все последующее отброшено.
Итак, getopt()
возвращает массив только с действительными и разборными параметрами. Вы все еще можете увидеть всю исходную командную строку, посмотрев на $argv
, которая остается неизменной, но как вы определяете, где в этой командной строке getopt()
перестали разбираться в аргументах? Очень важно знать это, если вы хотите рассматривать остальную часть командной строки как другой материал (например, имена файлов).
Вот пример...
Предположим, что я хочу настроить script для принятия следующих аргументов:
Usage: test [OPTION]... [FILE]...
Options:
-a something
-b something
-c something
Тогда я мог бы называть getopt()
следующим образом:
$args = getopt( 'abc' );
И, если я запустил script следующим образом:
$ ./test.php -a -bccc file1 file2 file3
Я должен ожидать, что для меня вернется следующий массив:
Array
(
[a] =>
[b] =>
[c] => Array
(
[0] =>
[1] =>
[2] =>
)
)
Итак, вопрос заключается в следующем: как на Земле я должен был знать, что три аргумента без аргумента, без опций FILE
начинаются с $argv[ 3 ]
???