• Пишем простое консольное приложение(CLI) на PHP

    PHPКомментариев нет

    В данной статье мы будем создавать простейшее cli приложение на php. Программ которую будем писать на php — это сумма 2х чисел.

    Для разработки будем использовать Symfony Console Component: https://symfony.com/doc/current/components/console.html

    Приступим:

    //
    // перейдем в корневой каталог
    $ cd /
    
    // создадим в корне каталог для нашего приложения
    $ mkdir Sum
    
    // войдем в папку
    $ cd Sum
    
    // установим композер если его нет
    $ sudo apt install composer
    
    // установим компонент Symfony Console Component
    $ composer require symfony/console
    
    // создадим папку src для нашего приложения и войдем в нее
    $ mkdir src
    $ cd src
    
    // создадим файл
    $ touch SumCommand.php
    
    // откроем файл SumCommand.php на редактирование
    $ vi SumCommand.php
    
    // Добавим в него следующий код
    <?php 
    namespace TrubinE;  
    
    use Symfony\Component\Console\Command\Command; 
    use Symfony\Component\Console\Input\InputInterface; 
    use Symfony\Component\Console\Input\InputArgument; 
    use Symfony\Component\Console\Output\OutputInterface;  
    
    class SumCommand extends Command {     
        public function configure()     
        {         
            $this->setName("sum")
                 ->setDescription("Sum 2 numbers")              
                 ->addArgument('a', InputArgument::REQUIRED, 'First number')              
                 ->addArgument('b', InputArgument::REQUIRED, 'Two number');     
        }     
    
        protected function execute (InputInterface $input, OutputInterface $output)    
        {        
            $a = $input->getArgument('a');        
            $b = $input->getArgument('b');        
            $s = $a + $b;        
            $output->writeln("$a + $b = $s");    
        } 
    }
    
    // выходим из каталога src
    $ cd ..
    
    // создадим еще один файл для запуска нашей программы(без расширения) и откроем его для редактирования
    $ touch run
    $ vi run
    
    // добавим в файл следующий код
    // на первой строке укажем чем запускать данный файл
    //(берем ссылку на php из настроек)
    #!/usr/bin/env php 
    <?php 
    require __DIR__.'/vendor/autoload.php';  
    
    use Symfony\Component\Console\Application; 
    use TrubinE\SumCommand;   
    
    $app = new Application("Welcome from console", "v1.0.0"); 
    $app->add(new SumCommand());
    $app->run();
    
    // откроем файл composer.json и настроим работу с namespace
    $ vi composer.json
    
    // добавим следующий код
    "autoload": {"psr-4": {"TrubinE\\": "src"}}
    
    // обновил файл автозагрузки
    $ composer install
    
    // для того что бы запускать наше приложение как и другие команды linux следующим образом:  ./run
    // нужно установить следующие права
    $ chmod +x run
    
    // проверяем работу приложения (нужно находиться в директории с файлов run)
    $ ./run sum 1 2
    
    

    Дополнительно

    Для выполнения скрпита как обычной программы в Linux нужно установить права на выполнение(chmod +x file) и добавить Shebang

    #!usr/bin/php — укажем что выполняемый файл на php

    #!usr/bin/env php — указываем на файл настроек, где есть php переменная с указанием пути на интерпретатор php

    Передаваемые переменные (переменные окружения):

    getenv(‘MYVAR’); — функция возвращает переменную окружения MYVAR

    getopt($shortopts, $longopts); — получаем опции переданные в командной строке(список получаемый опций: $shortopts, $longopts). Например: php example.php -fvalue -h (getopt получит -fvalue -h).

    Пример:

    <?php
    // Скрипт example.php
    $shortopts  = "";
    $shortopts .= "f:";  // Обязательное значение
    $shortopts .= "v::"; // Необязательное значение
    $shortopts .= "abc"; // Эти параметры не принимают никаких значений
    
    $longopts  = array(
        "required:",     // Обязательное значение
        "optional::",    // Необязательное значение
        "option",        // Нет значения
        "opt",           // Нет значения
    );
    $options = getopt($shortopts, $longopts);
    var_dump($options);

    var_dump($argv);$argv содержит все переменные которые мы передали в консоле для нашей команды

     


    Комментарии закрыты!