PHP-CLI in 7 steps - 7Masters PHP

41
1 PHP-CLI in 7 steps

description

Apresentação de Henrique Moody, no 7Masters - Encontro iMasters de Especialistas em PHP - Janeiro/2013

Transcript of PHP-CLI in 7 steps - 7Masters PHP

Page 1: PHP-CLI in 7 steps - 7Masters PHP

1

PHP-CLI in 7 steps

Page 2: PHP-CLI in 7 steps - 7Masters PHP

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

Page 3: PHP-CLI in 7 steps - 7Masters PHP

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.

Page 4: PHP-CLI in 7 steps - 7Masters PHP

4

Bilú quer a concha!

Page 5: PHP-CLI in 7 steps - 7Masters PHP

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.

Page 6: PHP-CLI in 7 steps - 7Masters PHP

6

1) Habilitar PHP-CLISete passos!

Page 7: PHP-CLI in 7 steps - 7Masters PHP

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.

Page 8: PHP-CLI in 7 steps - 7Masters PHP

8

1) Habilitar PHP-CLI;

2) Shebang

Sete passos!

Page 9: PHP-CLI in 7 steps - 7Masters PHP

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.

Page 10: PHP-CLI in 7 steps - 7Masters PHP

10

Exemplo

● Scripts em bash iniciam-se com o shebang#!/bin/bash

echo Hello!

Page 11: PHP-CLI in 7 steps - 7Masters PHP

11

Exemplo

● Scripts em PHP iniciam-se com o shebang#!/bin/php

<?php

echo "Hello";

Page 12: PHP-CLI in 7 steps - 7Masters PHP

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.

Page 13: PHP-CLI in 7 steps - 7Masters PHP

13

script.php

#!/usr/bin/env php<?phpecho "Hello";

Page 14: PHP-CLI in 7 steps - 7Masters PHP

14

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos

Sete passos!

Page 15: PHP-CLI in 7 steps - 7Masters PHP

15

$argv

● Array com os valores dos argumentos passados.

Page 16: PHP-CLI in 7 steps - 7Masters PHP

16

script.php

#!/usr/bin/env php<?phpprint_r($argv);

$ chmod +x script.php$ ./script.php Henrique MoodyArray(    [0] => ./script.php    [1] => Henrique    [2] => Moody)

Page 17: PHP-CLI in 7 steps - 7Masters PHP

17

$argc

● Número de parâmetros passados

Page 18: PHP-CLI in 7 steps - 7Masters PHP

18

script.php

#!/usr/bin/env php<?phpprint_r($argc);

$ chmod +x script.php$ ./script.php Henrique Moody3

Page 19: PHP-CLI in 7 steps - 7Masters PHP

19

$argc + $argv

● Combinação poderoza que permite parsear os argumentos passados

Page 20: PHP-CLI in 7 steps - 7Masters PHP

20

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);

$ chmod +x script.php$ ./script.php ­­first Henrique ­­last MoodyArray(    [­­first] => Henrique    [­­last] => Moody)

Page 21: PHP-CLI in 7 steps - 7Masters PHP

21

getopt()

● Facilita o parser de argumentos

Page 22: PHP-CLI in 7 steps - 7Masters PHP

22

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);

$ chmod +x script.php$ ./script.php \  ­f "value for f" \  ­v ­a \  ­­required value \  ­­optional="optional value" \  ­­optionArray(    [f] => value for f    [v] =>     [a] =>     [required] => value    [optional] => optional value    [option] => )

Page 23: PHP-CLI in 7 steps - 7Masters PHP

23

Bilú quer objeto!

Page 24: PHP-CLI in 7 steps - 7Masters PHP

24

Pacotes PHP para CLI scripts

● Console_Getopt (PEAR);● Zend_Console_Getopt;● Symfony\Component\Console.

Page 25: PHP-CLI in 7 steps - 7Masters PHP

25

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN

Sete passos!

Page 26: PHP-CLI in 7 steps - 7Masters PHP

26

STDIN

● Entrada padrão de dados.

Page 27: PHP-CLI in 7 steps - 7Masters PHP

27

script.php

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

$ chmod +x script.php$ ./script.phpDigite o seu nome: Henrique MoodyHenrique Moody

Page 28: PHP-CLI in 7 steps - 7Masters PHP

28

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN;

5) STDOUT

Sete passos!

Page 29: PHP-CLI in 7 steps - 7Masters PHP

29

STDOUT

● Saída padrão de dados.

Page 30: PHP-CLI in 7 steps - 7Masters PHP

30

script.php

#!/usr/bin/env php<?phpfwrite(STDOUT, 'Hola ¿cómo estás?' . PHP_EOL);

$ chmod +x script.php$ ./script.phpHola ¿cómo estás?

Page 31: PHP-CLI in 7 steps - 7Masters PHP

31

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN;

5) STDOUT;

6) STDERR

Sete passos!

Page 32: PHP-CLI in 7 steps - 7Masters PHP

32

script.php

#!/usr/bin/env php<?phpfwrite(STDERR, 'Hola ¿cómo estás?' . PHP_EOL);

$ chmod +x script.php$ ./script.phpHola ¿cómo estás?

Page 33: PHP-CLI in 7 steps - 7Masters PHP

33

What dá Fuck?

Page 34: PHP-CLI in 7 steps - 7Masters PHP

34

Relaxe os tend es.õ

Page 35: PHP-CLI in 7 steps - 7Masters PHP

35

STDOUT e STDERR

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

Page 36: PHP-CLI in 7 steps - 7Masters PHP

36

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

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

$ ./stdout.php 2> /dev/nullHola ¿cómo estás?

Page 37: PHP-CLI in 7 steps - 7Masters PHP

37

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN;

5) STDOUT;

6) STDERR

7) Exitcode

Sete passos!

Page 38: PHP-CLI in 7 steps - 7Masters PHP

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.

Page 39: PHP-CLI in 7 steps - 7Masters PHP

39

script.php

#!/usr/bin/env php<?phpfwrite(STDOUT, 'Quanto é 1 + 1? ');$value = trim(fgets(STDIN));

if ($value == '2') {    fwrite(STDOUT, 'Certa resposta!' . PHP_EOL);    exit(0);} else {    fwrite(STDOUT, 'Resposta errada, manolo!' . PHP_EOL);    exit(1);}

$ chmod +x script.php$ ./script.php Quanto é 1 + 1? 2Certa resposta!

$ echo $?0 $ ./script.php Quanto é 1 + 1? 4Resposta errada, manolo!

$ echo $?1

Page 40: PHP-CLI in 7 steps - 7Masters PHP

40

Acho que não temos tempo pra perguntas :/

Page 41: PHP-CLI in 7 steps - 7Masters PHP

41

Obrigado =)