вторник, 24 сентября 2019 г.

Список аргументов консольного скрипта

Всем привет. Сегодня будем разбираться, как получить список аргументов php-скрипта, запущенного из консоли.

Обычно запуск скрипта выглядит так:

> php script.php run 20 zzz
// или если у скрипта есть право на исполнение
> ./script.php run 20 zzz


Как же получить переданные в командной строке аргументы run, 20, zzz?

Для этого в php есть две зарезервированные переменные:
  • $argv - массив, содержит список аргументов. При этом учтите, что имя исполняемого скрипта также является аргументом командной строки и присутствует в списке аргументов. Поэтому, чтобы обратиться к значению run из нашего примера требуется использовать $argv[1], а не 0, так как $argv[0] - это script.php, офссылка.
  • $argc - число, содержит количество переданных аргументов, также учитывается имя исполняемого скрипта. Для нашего примера $argc равно 4, офссылка.

Как и любые другие глобальные переменные в скрипте, $argv и $argc не защищены от перезаписи. Так что если вы где-то в вашем скрипте напишете $argv = 42; то все ваши входные аргументы будут потеряны. Также, эти переменные не являются суперглобальными, то есть использовать их в функциях без явного указания global (фу) или передачи как аргумент функции - не получится.

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

В случае если вы хотите передавать именованные аргументы, например:

> php script.php --action=run --time=20 --option=zzz

то php их никак не парсит и просто выдает в $argv массив вида:

Array
(
    [0] => script.php
    [1] => --action=run
    [2] => --time=20
    [3] => --option=zzz
)


Для парсинга таких входных данных существует функция getopt, но ее рассмотрение - это повод для отдельного поста.

Комментариев нет:

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