PHP cli argument parser


При работе с php скриптами из коммандной строки очень часто приходится принимать различные аргументы. Для этих целей используется переменная $argv, в которую записываются все входящие значения.

Однако, область применения этой переменной ограничена, так как туда необходимо помещать все аргументы, довольно сложно добавлять или удалять уже имеющиеся аргументы, так как иногда приходится просматривать всю логику работы скрипта. Чтобы избежать этой проблемы и существуют парсеры аргументов для коммандой строки.

Моим требованиям удовлетворяет эта функция, найденная на просторах php.net. Пример ее работы:

1
2
3
4
5
6
7
8
9
10
11
12
13
[pfisher ~]$ php test.php --foo --bar=baz
  ["foo"]   => true
  ["bar"]   => "baz"

[pfisher ~]$ php test.php -abc
  ["a"]     => true
  ["b"]     => true
  ["c"]     => true

[pfisher ~]$ php test.php arg1 arg2 arg3
  [0]       => "arg1"
  [1]       => "arg2"
  [2]       => "arg3"

Т.е. логика работы похожа не передачу аргументво в bash скриптах, а также совместима и с обычным argv.

Код функции:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function parseArgs($argv){
    array_shift($argv);
    $out = array();
    foreach ($argv as $arg){
        if (substr($arg,0,2) == '--'){
            $eqPos = strpos($arg,'=');
            if ($eqPos === false){
                $key = substr($arg,2);
                $out[$key] = isset($out[$key]) ? $out[$key] : true;
            } else {
                $key = substr($arg,2,$eqPos-2);
                $out[$key] = substr($arg,$eqPos+1);
            }
        } else if (substr($arg,0,1) == '-'){
            if (substr($arg,2,1) == '='){
                $key = substr($arg,1,1);
                $out[$key] = substr($arg,3);
            } else {
                $chars = str_split(substr($arg,1));
                foreach ($chars as $char){
                    $key = $char;
                    $out[$key] = isset($out[$key]) ? $out[$key] : true;
                }
            }
        } else {
            $out[] = $arg;
        }
    }
    return $out;
}

Популярность: 1%


Также почитайте эти записи:

Получать новые статьи:

Один комментарий

  1. А вот мой вариант парсера аргументов:

    arturgspb.ru/read/php-par...ents-parser.html

    Ознакомься пожалуйста, возможно тебе пригодится

Оставить комментарий



Подписка на блог

Подпишись на обновление блога по RSS блога
Число подписчиков: 119

Поиск по сайту

Партнеры

Реклама

Партнеры