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" --optionarray(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í 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.pngKonfigurace 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('…')- …