Getopt-php - хорошая библиотека для обработки входящих параметров если нужен cli php скрипт.
Php библиотека для обработки параметров запуска скрипта
29.05.2018
Ссылка на проект getopt-php
Пример использования getopt-php
Более подробно:
Ставиться через composer.
Пример скрипта с простой командой:
php script.php test
<?php use GetOpt\GetOpt; use GetOpt\Option; use GetOpt\Command; use GetOpt\ArgumentException; use GetOpt\ArgumentException\Missing; require_once __DIR__ . '/vendor/autoload.php'; $getOpt = new GetOpt(); // Настройки вывода по умолчанию (экран "запрос без параметров") $getOpt->addOptions([ Option::create('?', 'help', GetOpt::NO_ARGUMENT) ->setDescription('Show this help and quit'), ]); // Создаем простую команду "test" $getOpt->addCommand(Command::create('test', function () { echo 'Тест!' . PHP_EOL; })->setDescription('Check if setup works')); // Добавит дополнительное описание на "запрос без параметров" или "-?" // Обработчик аргументов и ошибок try { try { $getOpt->process(); } catch (Missing $exception) { // catch missing exceptions if help is requested if (!$getOpt->getOption('help')) { throw $exception; } } } catch (ArgumentException $exception) { file_put_contents('php://stderr', $exception->getMessage() . PHP_EOL); echo PHP_EOL . $getOpt->getHelpText(); exit; } // Сосаставляет ввод с существующими командами, если не совпадает или команда "help", то выдает экран "запрос без параметров" $command = $getOpt->getCommand(); if (!$command || $getOpt->getOption('help')) { echo $getOpt->getHelpText(); exit; } // Выполнение команды call_user_func($command->getHandler(), $getOpt);
Пример скрипта со сложной командой:
Создаем отдельный файл, например, commandDo1.php.
<?php use GetOpt\Command; use GetOpt\GetOpt; use GetOpt\Operand; class Do1 extends Command { public function __construct() { parent::__construct('do_1', [$this, 'handle']); $this->addOperands([ Operand::create('in', Operand::REQUIRED), ]); } public function handle(GetOpt $getOpt) { echo "Do1 : ".$getOpt->getOperand('in')." \n"; } }
В файл скрипта добавляем подключение файла и добавление команды:
require_once __DIR__ . '/commandDo1.php'; $getOpt->addCommand(new Do1());
После вызываем:
php script.php do_1 test Do1 : test
Полный вариант файла:
<?php use GetOpt\GetOpt; use GetOpt\Option; use GetOpt\Command; use GetOpt\ArgumentException; use GetOpt\ArgumentException\Missing; require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/commandDo1.php'; $getOpt = new GetOpt(); $getOpt->addOptions([ Option::create('?', 'help', GetOpt::NO_ARGUMENT) ->setDescription('Show this help and quit'), ]); $getOpt->addCommand(new Do1()); try { try { $getOpt->process(); } catch (Missing $exception) { if (!$getOpt->getOption('help')) { throw $exception; } } } catch (ArgumentException $exception) { file_put_contents('php://stderr', $exception->getMessage() . PHP_EOL); echo PHP_EOL . $getOpt->getHelpText(); exit; } $command = $getOpt->getCommand(); if (!$command || $getOpt->getOption('help')) { echo $getOpt->getHelpText(); exit; } call_user_func($command->getHandler(), $getOpt);