Php библиотека для обработки параметров запуска скрипта

29.05.2018

Getopt-php - хорошая библиотека для обработки входящих параметров если нужен cli php скрипт.

Ссылка на проект 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);


Пометки: php cli, консоль, командная строка
Яндекс.Метрика