Desenvolvendo	
  em	
  PHP-­‐Cli	
  
Thiago	
  Paes	
  –	
  PHPSC	
  Conference	
  -­‐	
  2013	
  
Thiago Paes
• 
• 
• 
• 

Evangelista	
  PHP	
  
Aficcionado	
  por	
  código	
  limpo	
  e	
  organizado	
  
Membro	
  do	
...
PHP	
  não	
  é	
  somente	
  Server	
  Side,	
  	
  
você	
  pode	
  fazer	
  poderosas	
  aplicações	
  	
  
rodando	
  ...
VÁ	
  EM	
  FRENTE,	
  	
  
PEQUENO	
  
PADAWAN	
  
$ARGC	
  &	
  $ARGV	
  
FAÇA	
  DIREITO!!!!	
  
Symfony Console
namespace	
  AcmeDemoBundleCommand;	
  
	
  
use	
  SymfonyComponentConsoleCommandCommand;	
  
use	
  Symf...
Symfony Console
…	
  
	
  protected	
  func^on	
  execute(InputInterface	
  $input,	
  OutputInterface	
  $output)	
  
	
 ...
Silex
//Bootstrap our Silex application
$app = require __DIR__ . '/src/bootstrap.php';
//Include the namespaces of the com...
…	
  

Silex

//Register a command to run from the command line
//Our command will be started with "./console.php sync"
$c...
Silex
$> ./console.php
ProjectName version ProjectVersion
Usage:
[options] command [arguments]
Options:
--help
--quiet
--v...
Zend Console
//	
  	
  modules/applica.on/config/module.config.php	
  
array(
'router' => array(
'routes' => array(
// HTTP ...
Console Getopt Plus
$config = array(
      'header' => array('The command xyz is used to...',
        'Note that the heade...
Console Command Line
// Include the Console_CommandLine package.
require_once 'Console/CommandLine.php';
// create the par...
Console Command Line
…	
  
// add an option to delete original files after zipping
$parser->addOption(
    'delete',
    a...
Console Getargs

$config = array(
            // Option takes 2 values
            'files|images' => array('short' => 'f|i...
Console Getargs
…	
  

            // Option takes from 1 to an unlimited number of values
            'filters' => array(...
eZ	
  Components	
  -­‐	
  ConsoleTools
$input 
= new ezcConsoleInput();
$helpOption = $input->registerOption( 
    new ez...
TORNAR	
  EXECUTÁVEL	
  
o/	
  
#!/usr/bin/env	
  php	
  
Ha	
  Ha	
  Ha	
  
QUEM	
  DISSE?	
  
EMPACOTE!!!!
// create with alias "project.phar"
$phar = new Phar('project.phar', 0, 'project.phar');
$phar->buildFromIterator(
    new...
Dúvidas?	
  
Obrigado	
  
• 
• 
• 
• 

E-­‐mail:	
  mrprompt@gmail.com	
  
Twiler:	
  @mrprompt	
  
Blog:	
  hlp://mrprompt.blogspot.co...
Desenvolvendo em php cli
Desenvolvendo em php cli
Desenvolvendo em php cli
Desenvolvendo em php cli
Desenvolvendo em php cli
Desenvolvendo em php cli
Desenvolvendo em php cli
Desenvolvendo em php cli
Upcoming SlideShare
Loading in …5
×

Desenvolvendo em php cli

12,714 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,714
On SlideShare
0
From Embeds
0
Number of Embeds
101
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Desenvolvendo em php cli

  1. 1. Desenvolvendo  em  PHP-­‐Cli   Thiago  Paes  –  PHPSC  Conference  -­‐  2013  
  2. 2. Thiago Paes •  •  •  •  Evangelista  PHP   Aficcionado  por  código  limpo  e  organizado   Membro  do  PHP-­‐SC   Programador  PHP  a  10+  
  3. 3. PHP  não  é  somente  Server  Side,     você  pode  fazer  poderosas  aplicações     rodando  localmente.     SEM  um  servidor  web.  
  4. 4. VÁ  EM  FRENTE,     PEQUENO   PADAWAN  
  5. 5. $ARGC  &  $ARGV  
  6. 6. FAÇA  DIREITO!!!!  
  7. 7. Symfony Console namespace  AcmeDemoBundleCommand;     use  SymfonyComponentConsoleCommandCommand;   use  SymfonyComponentConsoleInputInputArgument;   use  SymfonyComponentConsoleInputInputInterface;   use  SymfonyComponentConsoleInputInputOp^on;   use  SymfonyComponentConsoleOutputOutputInterface;     class  GreetCommand  extends  Command   {          protected  func^on  configure()          {                  $this                          -­‐>setName('demo:greet')                          -­‐>setDescrip^on('Greet  someone')                          -­‐>addArgument(                                  'name',                                  InputArgument::OPTIONAL,                                  'Who  do  you  want  to  greet?'                          )                          -­‐>addOp^on(                                'yell',                                null,                                InputOp^on::VALUE_NONE,                                'If  set,  the  task  will  yell  in  uppercase  lelers'                          );          }             …  
  8. 8. Symfony Console …    protected  func^on  execute(InputInterface  $input,  OutputInterface  $output)          {                  $name  =  $input-­‐>getArgument('name');                  if  ($name)  {                          $text  =  'Hello  '.$name;                  }  else  {                          $text  =  'Hello';                  }                    if  ($input-­‐>getOp^on('yell'))  {                          $text  =  strtoupper($text);                  }                    $output-­‐>writeln($text);          }   }  
  9. 9. Silex //Bootstrap our Silex application $app = require __DIR__ . '/src/bootstrap.php'; //Include the namespaces of the components we plan to use use SymfonyComponentConsoleApplication; use SymfonyComponentConsoleInputInputInterface; use SymfonyComponentConsoleInputInputArgument; use SymfonyComponentConsoleInputInputOption; use SymfonyComponentConsoleOutputOutputInterface; //Instantiate our Console application $console = new Application('ProjectName', '0.1'); …  
  10. 10. …   Silex //Register a command to run from the command line //Our command will be started with "./console.php sync" $console->register( 'sync' )   ->setDefinition( array(      //Create a "--test" optional parameter      new InputOption('test', '', InputOption::VALUE_NONE, 'Test mode'),     ) )   ->setDescription('Synchronize with an external data source')   ->setHelp('Usage: <info>./console.php sync [--test]</info>')   ->setCode(     function(InputInterface $input, OutputInterface $output) use ($app)     {       if ($input->getOption('test'))       {         $output->write("ntTest Mode Enablednn");       }                               } ); $output->write( "Contacting external data source ...n"); //Do work here //Example: //  $app[ 'myExtension' ]->doStuff(); $console->run();
  11. 11. Silex $> ./console.php ProjectName version ProjectVersion Usage: [options] command [arguments] Options: --help --quiet --verbose --version --ansi --no-ansi --no-interaction -h -q -v -V Display this help message. Do not output any message. Increase verbosity of messages. Display this program version. Force ANSI output. Disable ANSI output. -n Do not ask any interactive question. Available commands: help Displays help for a command list Lists commands sync Synchronize with an external data source
  12. 12. Zend Console //    modules/applica.on/config/module.config.php   array( 'router' => array( 'routes' => array( // HTTP routes are defined here ) ), 'console' => array( 'router' => array( 'routes' => array( // Console routes go here ) ) ), )
  13. 13. Console Getopt Plus $config = array(       'header' => array('The command xyz is used to...',         'Note that the header and the usage are optional.'),       'usage' => array('--foo', '--bar <arg> -c [arg]'),       'options' => array(         array('long' => 'foo', 'type' => 'noarg', 'desc' => array(           'An option without argument with only the long',           'name defined.')),         array('long' => 'bar', 'type' => 'mandatory', 'short' => 'b',           'desc' => array('arg',             'A mandatory option with both the long and',             'the short names defined.')),         array('short' => 'c', 'type' => 'optional',           'desc' => array('arg',             'An option with an optional argument with only',             'the short name defined.'))),         'parameters' => array('[param1] [param2]',           'Some additional parameters.'),         'footer' => array('Some additional information.',           'Note that the footer is optional.'),     );     $options = Console_Getoptplus::getoptplus($config); 
  14. 14. Console Command Line // Include the Console_CommandLine package. require_once 'Console/CommandLine.php'; // create the parser $parser = new Console_CommandLine(array(     'description' => 'zip given files using the php zip module.',     'version'     => '1.0.0' )); // add an option to make the program verbose $parser->addOption(     'verbose',     array(         'short_name'  => '-v',         'long_name'   => '--verbose',         'action'      => 'StoreTrue',         'description' => 'turn on verbose output'     ) ); …  
  15. 15. Console Command Line …   // add an option to delete original files after zipping $parser->addOption(     'delete',     array(         'short_name'  => '-d',         'long_name'   => '--delete',         'action'      => 'StoreTrue',         'description' => 'delete original files after zip operation'     ) ); // run the parser try {     $result = $parser->parse();     // write your program here...     print_r($result->options);     print_r($result->args); } catch (Exception $exc) {     $parser->displayError($exc->getMessage()); }
  16. 16. Console Getargs $config = array(             // Option takes 2 values             'files|images' => array('short' => 'f|i',                     'min' => 2,                     'max' => 2,                     'desc' => 'Set the source and destination image files.'),             // Option takes 1 value             'width' => array('short' => 'w',                  'min' => 1,                  'max' => 1,                  'desc' => 'Set the new width of the image.'),             // Option is a switch             'debug' => array('short' => 'd',                  'max' => 0,                  'desc' => 'Switch to debug mode.'),             // Option takes from 1 to 3 values, using the default value(s) if the arg is not pres             'formats' => array('min' => 1,                    'max' => 3,                    'desc' => 'Set the image destination format.',                    'default' => array('jpegbig', 'jpegsmall')), …  
  17. 17. Console Getargs …               // Option takes from 1 to an unlimited number of values             'filters' => array('short' => 'fi',                    'min' => 1,                    'max' => -1,                    'desc' => 'Set the filters to be applied to the image upon conversion.  // The filters will be used in the order they are set.'),             // Option accept 1 value or nothing. If nothing, then the default value is used             'verbose' => array('short' => 'v',                    'min' => 0,                    'max' => 1,                    'desc' => 'Set the verbose level.',                    'default' => 3),             // Parameters. Anything leftover at the end of the command line is added.             CONSOLE_GETARGS_PARAMS => array('min' => 1,                         'max' => 2,                         'desc' =>                         'Set the application parameters.',                         'default' => 'DEFAULT')             );   $args =& Console_Getargs::factory($config);
  18. 18. eZ  Components  -­‐  ConsoleTools $input  = new ezcConsoleInput(); $helpOption = $input->registerOption(      new ezcConsoleOption(          'h',         'help'     ) ); Try {     $input->process(); } catch ( ezcConsoleOptionException $e ) {     die( $e->getMessage() ); } if ( $helpOption->value !== false ) {     echo "Help requested."; } else {     echo "No help requested."; }
  19. 19. TORNAR  EXECUTÁVEL   o/  
  20. 20. #!/usr/bin/env  php  
  21. 21. Ha  Ha  Ha   QUEM  DISSE?  
  22. 22. EMPACOTE!!!!
  23. 23. // create with alias "project.phar" $phar = new Phar('project.phar', 0, 'project.phar'); $phar->buildFromIterator(     new RecursiveIteratorIterator(      new RecursiveDirectoryIterator('/path/to/project')),     '/path/to/project'); $phar->setStub($phar->createDefaultStub('cli/index.php', 'www/index.php'));
  24. 24. Dúvidas?  
  25. 25. Obrigado   •  •  •  •  E-­‐mail:  mrprompt@gmail.com   Twiler:  @mrprompt   Blog:  hlp://mrprompt.blogspot.com   Mais:  hlp://about.me/mrprompt  

×