Итак, в PHP есть встроенная функция getopt(), которая возвращает информацию о том, какие параметры программы пользователь предоставил. Только, если я что-то не упустил, это совершенно не работает! Из руководства:
Разбор опций завершится при обнаружении первой неопции, все последующие отбрасываются.
Таким образом, getopt()
возвращает массив только с параметрами valid and parsed. Вы по-прежнему можете увидеть всю исходную командную строку, взглянув на $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]
- person EaterOfCode   schedule 26.01.2015$argv
, начинающиеся с дефиса, оставив только необязательные аргументы:preg_grep('/^-/', $argv, PREG_GREP_INVERT)
- person Quinn Comendant   schedule 21.06.2015$argv = array_values(preg_grep('/^-/', $argv, PREG_GREP_INVERT));
- person Quinn Comendant   schedule 24.08.2017