Разбор аргументов коммандной строки в PHP
В прошлой статье мы говорили о том, как превратить php скрипт в консольную команду для выполнения рутинных действий. А в этой посмотрим как разобрать аргументы командной строки в массив имя_аргумента => значение.
При вызове php скрипта посредством консоли ему доступны, среди прочего, следующие глобальные массивы $argv, $argc. Первый содержит все аргументы переданные скрипту, а второй количество этих аргументов, т.е. это аналог count($argv).
Вот скрипт, который разбирает аргументы командной строки и преобразует их в массив.
<<?php
function parse_arguments($argv,$argc)
{
$_args = array(); // массив разобранных аргументов
$delim = ','; // разделитель нескольких параметров
for ($i = 1; $i < $argc; $i++) {
// регулярным выражением проверяем, есть ли нужное нам соответствие
if (preg_match('/^--([^=]+)=(.*)/', $argv[$i], $match))
{
// если в значение аргумента есть разделитель
if( strpos( $match[2], $delim ) !== false )
{
// преобразуем значение в массив из этих аргументов
$_args[$match[1]] = explode( $delim, $match[2] );
}
else {
$_args[$match[1]] = $match[2];
}
}
}
return $_args;
}
// вызываем нашу функцию, передавая ей глобальные параметры $argv, $argc
$args = parse_arguments($argv,$argc);
// выводим в консоль
print_r($args);
Создаем файл parse_cli.bat следующего содержания:
@echo off
php parse_cli.php %*
Заметьте, что и файл parse_cli.php и parse_cli.bat лежат в одной папке. Однако, если вы собираетесь использовать свою команду parse_cli из любой точки ОС, то parse_cli.bat нужно положить в папку доступную в PATH, и в самом parse_cli.bat нужно прописать полный путь к файлу parse_cli.php.
Пример вызова:
C:\>parse_cli --create-controller=HomeController --views-path=home --views=index.html,login.html,dashboard.html
Вывод:
Array
(
[create-controller] => HomeController
[views-path] => Array
(
[0] => home
)
[views] => Array
(
[0] => index.html
[1] => login.html
[2] => dashboard.html
)
)
Таким образом, с помощью данного простого скрипта, можно разобрать аргументы командной строки в массив, с которыми уже можно работать. Конечно, скрипт не лишен недостатков, в частности, нет должных проверок на ошибки. Но, несмотря на это, он вполне способен выполнять свои функции.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.