SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
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 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
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
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 de
    aplicações Shell (concha) com PHP;
●   Funciona em qualquer OS.




                                                              5
Sete
passos!




          6
Um passo
1) Habilitar PHP-CLI




                                  7
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
Dois passos
1) 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 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
Exemplo
●   Scripts em bash iniciam-se com o shebang
       #!/bin/bash
       echo Hello




                                               11
Exemplo
●   Scripts em PHP iniciam-se com o shebang
       #!/bin/php
       <?php
       echo "Hello";




                                              12
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
script.php
#!/usr/bin/env php
<?php
echo 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL;




                                                     14
Terminal
$ chmod +x script.php
$ ./script.php
Hello, henriquemoody!




                        15
Três passos
1) 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
<?php
print_r($argv);




                     18
Terminal
$ ./script.php Henrique Moody
Array
(
    [0] => ./script.php
    [1] => Henrique
    [2] => Moody
)




                                19
$argc
●   Número de parâmetros passados




                                    20
script.php
#!/usr/bin/env php
<?php
print_r($argc);




                     21
Terminal
$ ./script.php
3




                 22
$argc + $argv
●   Combinação poderoza que permite parsear os argumentos
    passados




                                                            23
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
Terminal
$ ./script.php --first Henrique --last Moody
Array
(
    [--first] => Henrique
    [--last] => Moody
)




                                               25
getopt()
●   Facilita o parser de argumentos




                                      26
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
Terminal
$ ./script.php -f "value for f" -v -a --required value --optional="optional value" –opt
Array
(
    [f] => value for f
    [v] =>
    [a] =>
    [required] => value
    [optional] => optional value
    [option] =>
)




                                                                                          28
Bilú que objeto!




                   29
Pacotes PHP para CLI scripts
●   Console_Getopt (PEAR);
●   ZendConsole;
●   SymfonyComponentConsole.




                                             30
Quatro passos
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN




                                             31
STDIN
●   Entrada padrão de dados.




                                       32
script.php
#!/usr/bin/env php
<?php
echo "Digite o seu nome: ";
$name = fgets(STDIN);
print_r($name);




                              33
Terminal
$ ./script.php
Digite o seu nome: Henrique Moody
Henrique Moody




                                    34
Cinco passos
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN;
5) STDOUT




                                            35
STDOUT
●   Saída padrão de dados.




                                      36
script.php
#!/usr/bin/env php
<?php
fwrite(STDOUT, 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL);




                                                                37
Terminal
$ ./script.php
Hello, henriquemoody!




                        38
Seis passos
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN;
5) STDOUT;
6) STDERR



                                           39
STDERR
●   Saída de erro padrão.




                                     40
script.php
#!/usr/bin/env php
<?php
fwrite(STDERR, 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL);




                                                                41
Terminal
$ ./script.php
Hello, 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á.




                                                               45
Terminal
$ ./stdout.php
Hello, henriquemoody!
$ ./stderr.php
Hello, henriquemoody!




                        46
Terminal
$ ./stderr.php > /dev/null
Hello, henriquemoody!
$ ./stdout.php > /dev/null




                             47
Terminal
$ ./stdout.php 2> /dev/null
Hello, henriquemoody!
$ ./stderr.php 2> /dev/null




                              48
Sete passos
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN;
5) STDOUT;
6) STDERR
7) Exit code

                                           49
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
script.php
#!/usr/bin/env php
<?php
fwrite(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
Terminal
$ ./script.php
Quanto é 1 + 1? 2
Certa resposta!
$ echo $?
0




                    52
Terminal
$ ./script.php
Quanto é 1 + 1? 42
Resposta errada, manolo!
$ echo $?
1




                           53
Perguntas?




             54
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
Busquem
conhecimento




               56

Mais conteúdo relacionado

Destaque

Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013javamanrj
 
Conhecendo o-composer-por-nandokstronet
Conhecendo o-composer-por-nandokstronetConhecendo o-composer-por-nandokstronet
Conhecendo o-composer-por-nandokstronetCode Experts Learning
 
Domine Validação de Dados em 45min
Domine Validação de Dados em 45minDomine Validação de Dados em 45min
Domine Validação de Dados em 45minAlexandre Gaigalas
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHPGuilherme Blanco
 
NoSQL in MySQL
NoSQL in MySQLNoSQL in MySQL
NoSQL in MySQLUlf Wendel
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
Regular Expressions 101
Regular Expressions 101Regular Expressions 101
Regular Expressions 101Raj Rajandran
 
Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011
Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011
Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011KennisKring Amsterdam
 
презентация пресс центр победа Cер.лучник2
презентация пресс центр победа Cер.лучник2презентация пресс центр победа Cер.лучник2
презентация пресс центр победа Cер.лучник2AlexanderKarchenko
 
LifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 Target
LifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 TargetLifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 Target
LifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 TargetProActive Capital Resources Group
 
Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...
Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...
Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...KennisKring Amsterdam
 
Folleto AHEMON Tenerife
Folleto AHEMON TenerifeFolleto AHEMON Tenerife
Folleto AHEMON TenerifeAlina Baudet
 
Tours and travels by Rahul Shukla
Tours and travels by Rahul Shukla Tours and travels by Rahul Shukla
Tours and travels by Rahul Shukla abhayraichand
 
Grandma\'s Sweethearts
Grandma\'s SweetheartsGrandma\'s Sweethearts
Grandma\'s SweetheartsMayumi Cruz
 

Destaque (20)

O esquecido do PHP
O esquecido do PHPO esquecido do PHP
O esquecido do PHP
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
Conhecendo o-composer-por-nandokstronet
Conhecendo o-composer-por-nandokstronetConhecendo o-composer-por-nandokstronet
Conhecendo o-composer-por-nandokstronet
 
Domine Validação de Dados em 45min
Domine Validação de Dados em 45minDomine Validação de Dados em 45min
Domine Validação de Dados em 45min
 
Object Calisthenics Applied to PHP
Object Calisthenics Applied to PHPObject Calisthenics Applied to PHP
Object Calisthenics Applied to PHP
 
NoSQL in MySQL
NoSQL in MySQLNoSQL in MySQL
NoSQL in MySQL
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
Javascript para adultos
Javascript para adultosJavascript para adultos
Javascript para adultos
 
Regular Expressions 101
Regular Expressions 101Regular Expressions 101
Regular Expressions 101
 
Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011
Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011
Innovatie in de Sierteelt & het Businessmodel, door Michel Haring, 16 nov 2011
 
презентация пресс центр победа Cер.лучник2
презентация пресс центр победа Cер.лучник2презентация пресс центр победа Cер.лучник2
презентация пресс центр победа Cер.лучник2
 
LifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 Target
LifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 TargetLifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 Target
LifeTech Capital Updates NeoStem (NBS) Strong Buy $4.00 Target
 
Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...
Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...
Metro Campus:Geleyn Meijer, Economic Development Board Catch Up Sessie 24 jun...
 
Propietat intelectual a l'era digital
Propietat intelectual a l'era digitalPropietat intelectual a l'era digital
Propietat intelectual a l'era digital
 
Folleto AHEMON Tenerife
Folleto AHEMON TenerifeFolleto AHEMON Tenerife
Folleto AHEMON Tenerife
 
BioNeutral Group (OTCBB: BONU; Twitter $BONU)
BioNeutral Group (OTCBB: BONU; Twitter $BONU)BioNeutral Group (OTCBB: BONU; Twitter $BONU)
BioNeutral Group (OTCBB: BONU; Twitter $BONU)
 
Session 11 renewable energy
Session 11   renewable energySession 11   renewable energy
Session 11 renewable energy
 
Tours and travels by Rahul Shukla
Tours and travels by Rahul Shukla Tours and travels by Rahul Shukla
Tours and travels by Rahul Shukla
 
Business intelligence
Business intelligenceBusiness intelligence
Business intelligence
 
Grandma\'s Sweethearts
Grandma\'s SweetheartsGrandma\'s Sweethearts
Grandma\'s Sweethearts
 

Semelhante a PHP-CLI em 7 passos para iniciantes

PHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHPPHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHPiMasters
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrerMichele Silva
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPesteVitor Mattos
 
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!tdc-globalcode
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7Silvano Oliveira
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaJonata Weber
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGiMasters
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Introdução ao PHP - Criação de sites II
Introdução ao PHP - Criação de sites IIIntrodução ao PHP - Criação de sites II
Introdução ao PHP - Criação de sites IIinfo_cimol
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e FuturoFreedom DayMS
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 

Semelhante a PHP-CLI em 7 passos para iniciantes (20)

PHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHPPHP-CLI in 7 steps - 7Masters PHP
PHP-CLI in 7 steps - 7Masters PHP
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer
 
Xdebug seus problemas acabaram - TDC - PHPeste
Xdebug   seus problemas acabaram - TDC - PHPesteXdebug   seus problemas acabaram - TDC - PHPeste
Xdebug seus problemas acabaram - TDC - PHPeste
 
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
TDC2016 | Trilha PHP - Xdebug: Seus problemas acabaram!
 
PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7PW01 - Introdução a programação em PHPv7
PW01 - Introdução a programação em PHPv7
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
TDC 2016 - PHP7
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 
Curso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a AulaCurso PHP UNIFACS 2014.1 – 1a Aula
Curso PHP UNIFACS 2014.1 – 1a Aula
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNG
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Introdução ao PHP - Criação de sites II
Introdução ao PHP - Criação de sites IIIntrodução ao PHP - Criação de sites II
Introdução ao PHP - Criação de sites II
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para Linux
 
Php m18
Php m18Php m18
Php m18
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
PHP, Mercado e Certificações
PHP, Mercado e CertificaçõesPHP, Mercado e Certificações
PHP, Mercado e Certificações
 

PHP-CLI em 7 passos para iniciantes