Всем привет. Сегодня будем разбираться, как получить список аргументов php-скрипта, запущенного из консоли.
Обычно запуск скрипта выглядит так:
Как же получить переданные в командной строке аргументы
Для этого в php есть две зарезервированные переменные:
Как и любые другие глобальные переменные в скрипте,
Однако, выведя на экран содержимое суперглобальной переменной
В случае если вы хотите передавать именованные аргументы, например:
то 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, но ее рассмотрение - это повод для отдельного поста.