Пишем простое консольное приложение(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 содержит все переменные которые мы передали в консоле для нашей команды

 


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