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);