Command Line Interface (console)
Samostatně spustitelný skript
skript samostatně spustitelný
#!/usr/bin/env php <?php if($argc != 3) { echo "Usage {$argv[0]} <input> <output>\n"; exit(0); } file_put_contents($argv[2], file_get_contents($argv[1]));
$ chmod +x cp.php $ ./cp.php
Argumenty příkazové řádky
Přepínače z příkazové řádky
- getopt - vychází z shellového getopt(s)
$shortopts = "";
$shortopts .= "f:"; // přepínač s povinnou hodnotou
$shortopts .= "v::"; // přepínač s volitelnou hodnotou
$shortopts .= "abc"; // přepínače bez hodnoty
$longopts = array(
"required:", // přepínač s povinnou hodnotou
"optional::", // přepínač s volitelnou hodnotou
"option", // přepínače bez hodnoty
"opt", // přepínače bez hodnoty
);
$options = getopt($shortopts, $longopts);
var_dump($options);
Přepínače z příkazové řádky - volání
$ php getopt.php -f "value for f" -v -a --required value --optional="optional value" --option
array(6) {
["f"] => string(11) "value for f"
["v"] => bool(false)
["a"] => bool(false)
["required"] => string(5) "value"
["optional"] => string(14) "optional value"
["option"] => bool(false)
}
Symfony Console
instalace
composer require symfony/console
- dokumentace
- konzolová aplikace
Symfony\Component\Console\Application
- jednotlivé příkazy dědí od
Symfony\Component\Console\Command\Command
- nastavení
configure()
- název, popis, argumenty, přepínače - provádění příkazu
execute()
- nastavení
Aplikace
jednotlivé příkazy se zaregistrují pomocí
add()
require 'vendor/autoload.php'; use Symfony\Component\Console\Application; $app = new Application(); $app->add(new ResizeCommand()); // ... $app->run();
Konfigurace příkazu - název
pomocí PHP atributu AsCommand
#[AsCommand(name: 'hello:world')] class HelloWorldCommand extends Command
- nebo pomocí třídní proměnné
protected static $defaultName = 'image:resize'
(deprecated) nebo - nebo pomocí metody
setName
Příkazy se často člení do skupin podle :
, při volání stačí použít jednoznačnou zkratku
+
$ php cli.php i:r -w320 picture.png
Konfigurace příkazu - popis, nápověda
- popis
nápověda (
--help
)protected function configure() { $this ->setName('image:resize') ->setDescription('Resize image') ->setHelp('Resize PNG or JPEG and save result to new file') // ... ; }
Konfigurace příkazu - argumenty a přepínače
$this->addArgument('input', InputArgument::REQUIRED, 'Input image file')
REQUIRED
,OPTIONAL
,IS_ARRAY
- více hodnot (lze kombinovat s dvěma předchozími)
$this->addOption( // -w320, -w 320, --width 320, --width=320 'width', // dlouhá varianta 'w', // krátká varianta InputOption::VALUE_REQUIRED, 'Output image width', 640 // výchozí hodnota );
VALUE_NONE
,VALUE_REQUIRED
,VALUE_OPTIONAL
,VALUE_IS_ARRAY
- více hodnot (lze kombinovat s dvěma předchozími)
- Understanding how Console Arguments and Options Are Handled
Provádění příkazu
protected function execute(InputInterface $input, OutputInterface $output)
- vstup
$input->getArgument('…')
$input->getOption('…')
- výstup
$output->write('…')
$output->writeln('…')
- …