SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
PHP-CLI in 7 steps



                     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 e Composer dentre vários outros.




https://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!
1) Habilitar PHP-CLI




                                      6
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.



                                                                     7
Sete passos!
1) Habilitar PHP-CLI;
2) Shebang




                                       8
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.




                                                                 9
Exemplo
●   Scripts em bash iniciam-se com o shebang
      #!/bin/bash
      echo Hello!




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




                                              11
Dica: 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.




                                                               12
script.php
#!/usr/bin/env php
<?php
echo "Hello";




                     13
Sete passos!
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos




                                           14
$argv
●   Array com os valores dos argumentos passados.




                                                    15
script.php           $ chmod +x script.php
                     $ ./script.php Henrique Moody
                     Array
#!/usr/bin/env php   (
<?php                    [0] => ./script.php
print_r($argv);
                         [1] => Henrique
                         [2] => Moody
                     )




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




                                    17
script.php           $ chmod +x script.php
                     $ ./script.php Henrique Moody
                     3
#!/usr/bin/env php
<?php
print_r($argc);




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




                                                            19
script.php                          $ chmod +x script.php
                                    $ ./script.php ­­first Henrique ­­last Moody
                                    Array
#!/usr/bin/env php                  (
<?php                                   [­­first] => Henrique
$options = array();
for ($i=1; $i < $argc; $i=$i+2) {       [­­last] => Moody
    $key = $argv[$i];               )
    $value = $argv[$i+1];
    $options[$key] = $value;
}
print_r($options);




                                                                                   20
getopt()
●   Facilita o parser de argumentos




                                      21
script.php                                               $ chmod +x script.php
                                                         $ ./script.php 
                                                           ­f "value for f" 
#!/usr/bin/env php                                         ­v ­a 
<?php                                                      ­­required value 
$shortopts  = "";
$shortopts .= "f:";  // Valor obrigatório                  ­­optional="optional value" 
$shortopts .= "v::"; // Valor opcional                     ­­option
$shortopts .= "abc"; // Opções que não aceitam valores
                                                         Array
$longopts  = array(                                      (
    "required:",     // Valor obrigatório
    "optional::",    // Valor opcional                       [f] => value for f
    "option",        // Sem valor                            [v] => 
    "opt",           // Sem valor
);                                                           [a] => 
$options = getopt($shortopts, $longopts);                    [required] => value
print_r($options);
                                                             [optional] => optional value
                                                             [option] => 
                                                         )




                                                                                            22
Bilú quer
 objeto!




            23
Pacotes PHP para CLI scripts
●   Console_Getopt (PEAR);
●   Zend_Console_Getopt;
●   SymfonyComponentConsole.




                                            24
Sete passos!
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN




                                            25
STDIN
●   Entrada padrão de dados.




                                       26
script.php                    $ chmod +x script.php
                              $ ./script.php
                              Digite o seu nome: Henrique Moody
#!/usr/bin/env php            Henrique Moody
<?php
echo "Digite o seu nome: ";
$name = fgets(STDIN);
print_r($name);




                                                                  27
Sete passos!
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN;
5) STDOUT




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




                                      29
script.php                                       $ chmod +x script.php
                                                 $ ./script.php
                                                 Hola ¿cómo estás?
#!/usr/bin/env php
<?php
fwrite(STDOUT, 'Hola ¿cómo estás?' . PHP_EOL);




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



                                            31
script.php                                       $ chmod +x script.php
                                                 $ ./script.php
                                                 Hola ¿cómo estás?
#!/usr/bin/env php
<?php
fwrite(STDERR, 'Hola ¿cómo estás?' . PHP_EOL);




                                                                         32
What dá Fuck?




                33
Relaxe os
tendões.




            34
STDOUT e STDERR
●   Para um usuário aparentemente não há diferença, mas para
    um programa há.




                                                               35
$ chmod +x script.php         $ chmod +x script.php
$ ./stdout.php                $ ./stderr.php
Hola ¿cómo estás?             Hola ¿cómo estás?
$ ./stdout.php > /dev/null    $ ./stderr.php > /dev/null
                              Hola ¿cómo estás?
$ ./stdout.php 2> /dev/null   $ ./stderr.php 2> /dev/null
Hola ¿cómo estás?




                                                            36
Sete passos!
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN;
5) STDOUT;
6) STDERR
7) Exitcode

                                            37
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.


                                                                         38
script.php                                                  $ chmod +x script.php
                                                            $ ./script.php 
                                                            Quanto é 1 + 1? 2
#!/usr/bin/env php                                          Certa resposta!
<?php
fwrite(STDOUT, 'Quanto é 1 + 1? ');
$value = trim(fgets(STDIN));                                $ echo $?
                                                            0
if ($value == '2') {
    fwrite(STDOUT, 'Certa resposta!' . PHP_EOL);             
    exit(0);                                                $ ./script.php 
} else {
    fwrite(STDOUT, 'Resposta errada, manolo!' . PHP_EOL);   Quanto é 1 + 1? 4
    exit(1);                                                Resposta errada, manolo!
}

                                                            $ echo $?
                                                            1




                                                                                       39
Acho que não temos tempo pra perguntas :/




                                            40
Obrigado =)




              41

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Notas deaulas
Notas deaulasNotas deaulas
Notas deaulas
 
PHP 7
PHP 7PHP 7
PHP 7
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1CURSO DE PHP PARA INICIANTES - AULA 1
CURSO DE PHP PARA INICIANTES - AULA 1
 
Curso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP BásicoCurso Linguagem de Programação I - PHP Básico
Curso Linguagem de Programação I - PHP Básico
 
Minicurso PHP básico
Minicurso PHP básicoMinicurso PHP básico
Minicurso PHP básico
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
TDC 2016 - PHP7
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7
 
O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à Shellscript
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Shell script
Shell scriptShell script
Shell script
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
Mini Curso de PHP
Mini Curso de PHPMini Curso de PHP
Mini Curso de PHP
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 

Similar a PHP-CLI in 7 steps - 7Masters 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 morrerMichele Silva
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHPAugusto das Neves
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Israel Messias
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECLW3P Projetos Web
 
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
 
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
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGiMasters
 
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
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPCarlos Santos
 
Oficina shell
Oficina shellOficina shell
Oficina shellapsegundo
 

Similar a PHP-CLI in 7 steps - 7Masters PHP (20)

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
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 
5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP5 Maneiras de melhorar seu código PHP
5 Maneiras de melhorar seu código PHP
 
Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1Programação Orientada a Objetos (POO) com PHP - Parte 1
Programação Orientada a Objetos (POO) com PHP - Parte 1
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
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
 
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!
 
Módulo de php
Módulo de phpMódulo de php
Módulo de php
 
Zephir
ZephirZephir
Zephir
 
Painel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNGPainel HHVM, Zephir, PHPNG
Painel HHVM, Zephir, PHPNG
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
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
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Linux shell
Linux shellLinux shell
Linux shell
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
Oficina shell
Oficina shellOficina shell
Oficina shell
 

Más de iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsiMasters
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 

Más de iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

PHP-CLI in 7 steps - 7Masters PHP

  • 1. PHP-CLI in 7 steps 1
  • 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 e Composer dentre vários outros. https://about.me/henriquemoody 2
  • 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. Bilú quer a concha! 4
  • 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
  • 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. 7
  • 8. Sete passos! 1) Habilitar PHP-CLI; 2) Shebang 8
  • 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. 9
  • 10. Exemplo ● Scripts em bash iniciam-se com o shebang #!/bin/bash echo Hello! 10
  • 11. Exemplo ● Scripts em PHP iniciam-se com o shebang #!/bin/php <?php echo "Hello"; 11
  • 12. Dica: 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. 12
  • 14. Sete passos! 1) Habilitar PHP-CLI; 2) Shebang; 3) Passagem de argumentos 14
  • 15. $argv ● Array com os valores dos argumentos passados. 15
  • 16. script.php $ chmod +x script.php $ ./script.php Henrique Moody Array #!/usr/bin/env php ( <?php     [0] => ./script.php print_r($argv);     [1] => Henrique     [2] => Moody ) 16
  • 17. $argc ● Número de parâmetros passados 17
  • 18. script.php $ chmod +x script.php $ ./script.php Henrique Moody 3 #!/usr/bin/env php <?php print_r($argc); 18
  • 19. $argc + $argv ● Combinação poderoza que permite parsear os argumentos passados 19
  • 20. script.php $ chmod +x script.php $ ./script.php ­­first Henrique ­­last Moody Array #!/usr/bin/env php ( <?php     [­­first] => Henrique $options = array(); for ($i=1; $i < $argc; $i=$i+2) {     [­­last] => Moody     $key = $argv[$i]; )     $value = $argv[$i+1];     $options[$key] = $value; } print_r($options); 20
  • 21. getopt() ● Facilita o parser de argumentos 21
  • 22. script.php $ chmod +x script.php $ ./script.php    ­f "value for f"  #!/usr/bin/env php   ­v ­a  <?php   ­­required value  $shortopts  = ""; $shortopts .= "f:";  // Valor obrigatório   ­­optional="optional value"  $shortopts .= "v::"; // Valor opcional   ­­option $shortopts .= "abc"; // Opções que não aceitam valores Array $longopts  = array( (     "required:",     // Valor obrigatório     "optional::",    // Valor opcional     [f] => value for f     "option",        // Sem valor     [v] =>      "opt",           // Sem valor );     [a] =>  $options = getopt($shortopts, $longopts);     [required] => value print_r($options);     [optional] => optional value     [option] =>  ) 22
  • 24. Pacotes PHP para CLI scripts ● Console_Getopt (PEAR); ● Zend_Console_Getopt; ● SymfonyComponentConsole. 24
  • 25. Sete passos! 1) Habilitar PHP-CLI; 2) Shebang; 3) Passagem de argumentos; 4) STDIN 25
  • 26. STDIN ● Entrada padrão de dados. 26
  • 27. script.php $ chmod +x script.php $ ./script.php Digite o seu nome: Henrique Moody #!/usr/bin/env php Henrique Moody <?php echo "Digite o seu nome: "; $name = fgets(STDIN); print_r($name); 27
  • 28. Sete passos! 1) Habilitar PHP-CLI; 2) Shebang; 3) Passagem de argumentos; 4) STDIN; 5) STDOUT 28
  • 29. STDOUT ● Saída padrão de dados. 29
  • 30. script.php $ chmod +x script.php $ ./script.php Hola ¿cómo estás? #!/usr/bin/env php <?php fwrite(STDOUT, 'Hola ¿cómo estás?' . PHP_EOL); 30
  • 31. Sete passos! 1) Habilitar PHP-CLI; 2) Shebang; 3) Passagem de argumentos; 4) STDIN; 5) STDOUT; 6) STDERR 31
  • 32. script.php $ chmod +x script.php $ ./script.php Hola ¿cómo estás? #!/usr/bin/env php <?php fwrite(STDERR, 'Hola ¿cómo estás?' . PHP_EOL); 32
  • 35. STDOUT e STDERR ● Para um usuário aparentemente não há diferença, mas para um programa há. 35
  • 36. $ chmod +x script.php $ chmod +x script.php $ ./stdout.php $ ./stderr.php Hola ¿cómo estás? Hola ¿cómo estás? $ ./stdout.php > /dev/null $ ./stderr.php > /dev/null Hola ¿cómo estás? $ ./stdout.php 2> /dev/null $ ./stderr.php 2> /dev/null Hola ¿cómo estás? 36
  • 37. Sete passos! 1) Habilitar PHP-CLI; 2) Shebang; 3) Passagem de argumentos; 4) STDIN; 5) STDOUT; 6) STDERR 7) Exitcode 37
  • 38. 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. 38
  • 39. script.php $ chmod +x script.php $ ./script.php  Quanto é 1 + 1? 2 #!/usr/bin/env php Certa resposta! <?php fwrite(STDOUT, 'Quanto é 1 + 1? '); $value = trim(fgets(STDIN)); $ echo $? 0 if ($value == '2') {     fwrite(STDOUT, 'Certa resposta!' . PHP_EOL);       exit(0); $ ./script.php  } else {     fwrite(STDOUT, 'Resposta errada, manolo!' . PHP_EOL); Quanto é 1 + 1? 4     exit(1); Resposta errada, manolo! } $ echo $? 1 39
  • 40. Acho que não temos tempo pra perguntas :/ 40