Разбор аргументов коммандной строки в 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
  )
)
    
    Таким образом, с помощью данного простого скрипта, можно разобрать аргументы командной строки в массив, с которыми уже можно работать. Конечно, скрипт не лишен недостатков, в частности, нет должных проверок на ошибки. Но, несмотря на это, он вполне способен выполнять свои функции.
- 
					Создано 09.05.2019 09:30:42  
- 
					 Михаил Русаков Михаил Русаков
 
			 
			 
		 
				 
			 
				 
				 
				 
				
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.