PHP-CLI em 7 passos                      1
Henrique Moody●    Desenvolvedor web com foco em PHP desde 2007, usuário    assíduo de Linux desde 2008 e Zend Certified E...
PHP nasceu para web●   A maior parte das aplicações PHP é escrita para rodar em    ambiente web;●   Nasceu sob o nome the ...
Bilú quer a  concha!              4
CLI - Command-Line Interface●   PHP suporta CLI desde o PHP 4.3.0.●   O foco principal deste SAPI é para o desenvolvimento...
Setepassos!          6
Um passo1) Habilitar PHP-CLI                                  7
Habilitando PHP-CLI●   Vem habilitado por padrão na maioria das distrubições Linux;●   Para habilitar ao compilar utilize ...
Dois passos1) Habilitar PHP-CLI;2) Shebang                                      9
Shebang●   Um shebang refere-se aos dois caracteres "#!", quando os    mesmos são os primeiros caracteres de um arquivo de...
Exemplo●   Scripts em bash iniciam-se com o shebang       #!/bin/bash       echo Hello                                    ...
Exemplo●   Scripts em PHP iniciam-se com o shebang       #!/bin/php       <?php       echo "Hello";                       ...
Path do interpretador●   Algumas vezes o interpretador pode estar em um path    diferente, por exemplo, o PHP pode estar e...
script.php#!/usr/bin/env php<?phpecho Hello,  . $_SERVER[USER] . ! . PHP_EOL;                                             ...
Terminal$ chmod +x script.php$ ./script.phpHello, henriquemoody!                        15
Três passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos                                          16
$argv●   Array com os valores dos argumentos passados.                                                    17
script.php#!/usr/bin/env php<?phpprint_r($argv);                     18
Terminal$ ./script.php Henrique MoodyArray(    [0] => ./script.php    [1] => Henrique    [2] => Moody)                    ...
$argc●   Número de parâmetros passados                                    20
script.php#!/usr/bin/env php<?phpprint_r($argc);                     21
Terminal$ ./script.php3                 22
$argc + $argv●   Combinação poderoza que permite parsear os argumentos    passados                                        ...
script.php#!/usr/bin/env php<?php$options = array();for ($i=1; $i < $argc; $i=$i+2) {    $key = $argv[$i];    $value = $ar...
Terminal$ ./script.php --first Henrique --last MoodyArray(    [--first] => Henrique    [--last] => Moody)                 ...
getopt()●   Facilita o parser de argumentos                                      26
script.php#!/usr/bin/env php<?php$shortopts     = "";$shortopts .= "f:";      // Valor obrigatório$shortopts .= "v::"; // ...
Terminal$ ./script.php -f "value for f" -v -a --required value --optional="optional value" –optArray(    [f] => value for ...
Bilú que objeto!                   29
Pacotes PHP para CLI scripts●   Console_Getopt (PEAR);●   ZendConsole;●   SymfonyComponentConsole.                        ...
Quatro passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN                                           ...
STDIN●   Entrada padrão de dados.                                       32
script.php#!/usr/bin/env php<?phpecho "Digite o seu nome: ";$name = fgets(STDIN);print_r($name);                          ...
Terminal$ ./script.phpDigite o seu nome: Henrique MoodyHenrique Moody                                    34
Cinco passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN;5) STDOUT                                  ...
STDOUT●   Saída padrão de dados.                                      36
script.php#!/usr/bin/env php<?phpfwrite(STDOUT, Hello,  . $_SERVER[USER] . ! . PHP_EOL);                                  ...
Terminal$ ./script.phpHello, henriquemoody!                        38
Seis passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN;5) STDOUT;6) STDERR                         ...
STDERR●   Saída de erro padrão.                                     40
script.php#!/usr/bin/env php<?phpfwrite(STDERR, Hello,  . $_SERVER[USER] . ! . PHP_EOL);                                  ...
Terminal$ ./script.phpHello, henriquemoody!                        42
What dá Fuck?                43
Relaxe os tendões!                     44
STDOUT e STDERR●   Para um usuário aparentemente não há diferença, mas para    um programa há.                            ...
Terminal$ ./stdout.phpHello, henriquemoody!$ ./stderr.phpHello, henriquemoody!                        46
Terminal$ ./stderr.php > /dev/nullHello, henriquemoody!$ ./stdout.php > /dev/null                             47
Terminal$ ./stdout.php 2> /dev/nullHello, henriquemoody!$ ./stderr.php 2> /dev/null                              48
Sete passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN;5) STDOUT;6) STDERR7) Exit code             ...
Exit code●   Exit code, ou return code de um processo é um número inteiro que é    passado do processo filho para o proces...
script.php#!/usr/bin/env php<?phpfwrite(STDOUT, Quanto Ãé 1 + 1? );$value = (int) fgets(STDIN);if ($value === 2) {    fwri...
Terminal$ ./script.phpQuanto é 1 + 1? 2Certa resposta!$ echo $?0                    52
Terminal$ ./script.phpQuanto é 1 + 1? 42Resposta errada, manolo!$ echo $?1                           53
Perguntas?             54
Recursos●   Exemplos da palestra:    https://gist.github.com/fd9a8187f410c03bebb1;●   PHP-CLI: http://php.net/cli;●   PHP ...
Busquemconhecimento               56
Upcoming SlideShare
Loading in …5
×

PHP-CLI em 7 passos

2,853 views

Published on

Criando scripts CLI com PHP

Published in: Technology
3 Comments
11 Likes
Statistics
Notes
No Downloads
Views
Total views
2,853
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
35
Comments
3
Likes
11
Embeds 0
No embeds

No notes for slide

PHP-CLI em 7 passos

  1. 1. PHP-CLI em 7 passos 1
  2. 2. Henrique Moody● Desenvolvedor web com foco em PHP desde 2007, usuário assíduo de Linux desde 2008 e Zend Certified Engineer desde 2011.● Atua com Desenvolvedor e Líder Técnico na Dafiti - empresa de comércio eletrônico brasileira.● Forte entusiasta da comunidade PHP no Brasil e contribuidor de projetos Open Source como Respect (https://github.com/Respect) e Composer (https://github.com/composer) dentre vários outros. http://about.me/henriquemoody 2
  3. 3. PHP nasceu para web● A maior parte das aplicações PHP é escrita para rodar em ambiente web;● Nasceu sob o nome the Personal Home Page/Forms Interpreter;● Após o lançamento da versão 4 houve a necessidade de rodar PHP fora da web. 3
  4. 4. Bilú quer a concha! 4
  5. 5. CLI - Command-Line Interface● PHP suporta CLI desde o PHP 4.3.0.● O foco principal deste SAPI é para o desenvolvimento de aplicações Shell (concha) com PHP;● Funciona em qualquer OS. 5
  6. 6. Setepassos! 6
  7. 7. Um passo1) Habilitar PHP-CLI 7
  8. 8. Habilitando PHP-CLI● Vem habilitado por padrão na maioria das distrubições Linux;● Para habilitar ao compilar utilize --enable-cli (habilitado por padrão);● Windows: verifique a variável de ambiente PATH;● Debian-based: apt-get install php-cli;● RPM-based: yum install php-cli. 8
  9. 9. Dois passos1) Habilitar PHP-CLI;2) Shebang 9
  10. 10. Shebang● Um shebang refere-se aos dois caracteres "#!", quando os mesmos são os primeiros caracteres de um arquivo de texto, especificamente em um código fonte escrito em uma linguagem interpretada.● O sistema tenta executar o arquivo usando um interpretador especificado pelo shebang. 10
  11. 11. Exemplo● Scripts em bash iniciam-se com o shebang #!/bin/bash echo Hello 11
  12. 12. Exemplo● Scripts em PHP iniciam-se com o shebang #!/bin/php <?php echo "Hello"; 12
  13. 13. Path do interpretador● Algumas vezes o interpretador pode estar em um path diferente, por exemplo, o PHP pode estar em /usr/bin/php e não em /usr/bin/php.● Para resolver este problema podemos usar o comando /usr/bin/env que define as variáveis de ambiente. 13
  14. 14. script.php#!/usr/bin/env php<?phpecho Hello, . $_SERVER[USER] . ! . PHP_EOL; 14
  15. 15. Terminal$ chmod +x script.php$ ./script.phpHello, henriquemoody! 15
  16. 16. Três passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos 16
  17. 17. $argv● Array com os valores dos argumentos passados. 17
  18. 18. script.php#!/usr/bin/env php<?phpprint_r($argv); 18
  19. 19. Terminal$ ./script.php Henrique MoodyArray( [0] => ./script.php [1] => Henrique [2] => Moody) 19
  20. 20. $argc● Número de parâmetros passados 20
  21. 21. script.php#!/usr/bin/env php<?phpprint_r($argc); 21
  22. 22. Terminal$ ./script.php3 22
  23. 23. $argc + $argv● Combinação poderoza que permite parsear os argumentos passados 23
  24. 24. script.php#!/usr/bin/env php<?php$options = array();for ($i=1; $i < $argc; $i=$i+2) { $key = $argv[$i]; $value = $argv[$i+1]; $options[$key] = $value;}print_r($options); 24
  25. 25. Terminal$ ./script.php --first Henrique --last MoodyArray( [--first] => Henrique [--last] => Moody) 25
  26. 26. getopt()● Facilita o parser de argumentos 26
  27. 27. script.php#!/usr/bin/env php<?php$shortopts = "";$shortopts .= "f:"; // Valor obrigatório$shortopts .= "v::"; // Valor opcional$shortopts .= "abc"; // Opções que não aceitam valores$longopts = array( "required:", // Valor obrigatório "optional::", // Valor opcional "option", // Sem valor "opt", // Sem valor);$options = getopt($shortopts, $longopts);print_r($options); 27
  28. 28. Terminal$ ./script.php -f "value for f" -v -a --required value --optional="optional value" –optArray( [f] => value for f [v] => [a] => [required] => value [optional] => optional value [option] =>) 28
  29. 29. Bilú que objeto! 29
  30. 30. Pacotes PHP para CLI scripts● Console_Getopt (PEAR);● ZendConsole;● SymfonyComponentConsole. 30
  31. 31. Quatro passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN 31
  32. 32. STDIN● Entrada padrão de dados. 32
  33. 33. script.php#!/usr/bin/env php<?phpecho "Digite o seu nome: ";$name = fgets(STDIN);print_r($name); 33
  34. 34. Terminal$ ./script.phpDigite o seu nome: Henrique MoodyHenrique Moody 34
  35. 35. Cinco passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN;5) STDOUT 35
  36. 36. STDOUT● Saída padrão de dados. 36
  37. 37. script.php#!/usr/bin/env php<?phpfwrite(STDOUT, Hello, . $_SERVER[USER] . ! . PHP_EOL); 37
  38. 38. Terminal$ ./script.phpHello, henriquemoody! 38
  39. 39. Seis passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN;5) STDOUT;6) STDERR 39
  40. 40. STDERR● Saída de erro padrão. 40
  41. 41. script.php#!/usr/bin/env php<?phpfwrite(STDERR, Hello, . $_SERVER[USER] . ! . PHP_EOL); 41
  42. 42. Terminal$ ./script.phpHello, henriquemoody! 42
  43. 43. What dá Fuck? 43
  44. 44. Relaxe os tendões! 44
  45. 45. STDOUT e STDERR● Para um usuário aparentemente não há diferença, mas para um programa há. 45
  46. 46. Terminal$ ./stdout.phpHello, henriquemoody!$ ./stderr.phpHello, henriquemoody! 46
  47. 47. Terminal$ ./stderr.php > /dev/nullHello, henriquemoody!$ ./stdout.php > /dev/null 47
  48. 48. Terminal$ ./stdout.php 2> /dev/nullHello, henriquemoody!$ ./stderr.php 2> /dev/null 48
  49. 49. Sete passos1) Habilitar PHP-CLI;2) Shebang;3) Passagem de argumentos;4) STDIN;5) STDOUT;6) STDERR7) Exit code 49
  50. 50. Exit code● Exit code, ou return code de um processo é um número inteiro que é passado do processo filho para o processo pai quando o processo filho termina sua execução.● O número deve ser entre 0-255, ao forçar um número fora desse intervalo o comportamento é intermitente;● 0 é considerado sucesso;● Qualquer número maior que 0 é considerado erro;● O programador pode/deve documentar os tipos de erro por número. 50
  51. 51. script.php#!/usr/bin/env php<?phpfwrite(STDOUT, Quanto Ãé 1 + 1? );$value = (int) fgets(STDIN);if ($value === 2) { fwrite(STDERR, Certa resposta! . PHP_EOL); exit(0);} else { fwrite(STDOUT, Resposta errada, manolo! . PHP_EOL); exit(1);} 51
  52. 52. Terminal$ ./script.phpQuanto é 1 + 1? 2Certa resposta!$ echo $?0 52
  53. 53. Terminal$ ./script.phpQuanto é 1 + 1? 42Resposta errada, manolo!$ echo $?1 53
  54. 54. Perguntas? 54
  55. 55. Recursos● Exemplos da palestra: https://gist.github.com/fd9a8187f410c03bebb1;● PHP-CLI: http://php.net/cli;● PHP getopt(): http://php.net/getopt;● Console_Getopt: http://pear.php.net/Console_Getopt;● ZendConsole: http://goo.gl/SchES;● SymfonyConsole: https://github.com/symfony/Console. 55
  56. 56. Busquemconhecimento 56

×