php-cli em 7 passos

56
1 PHP-CLI em 7 passos

Upload: henrique-moody

Post on 27-Dec-2014

1.272 views

Category:

Technology


3 download

DESCRIPTION

Criando scripts CLI com PHP

TRANSCRIPT

Page 1: PHP-CLI em 7 passos

1

PHP-CLI em 7 passos

Page 2: PHP-CLI em 7 passos

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

Page 3: PHP-CLI em 7 passos

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 em 7 passos

4

Bilú quer a concha!

Page 5: PHP-CLI em 7 passos

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 em 7 passos

6

Sete passos!

Page 7: PHP-CLI em 7 passos

7

1) Habilitar PHP-CLIUm passo

Page 8: PHP-CLI em 7 passos

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.

Page 9: PHP-CLI em 7 passos

9

1) Habilitar PHP-CLI;

2) Shebang

Dois passos

Page 10: PHP-CLI em 7 passos

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.

Page 11: PHP-CLI em 7 passos

11

Exemplo

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

echo Hello

Page 12: PHP-CLI em 7 passos

12

Exemplo

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

<?php

echo "Hello";

Page 13: PHP-CLI em 7 passos

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.

Page 14: PHP-CLI em 7 passos

14

script.php

#!/usr/bin/env php

<?php

echo 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL;

Page 15: PHP-CLI em 7 passos

15

Terminal

$ chmod +x script.php

$ ./script.php

Hello, henriquemoody!

Page 16: PHP-CLI em 7 passos

16

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos

Três passos

Page 17: PHP-CLI em 7 passos

17

$argv

● Array com os valores dos argumentos passados.

Page 18: PHP-CLI em 7 passos

18

script.php

#!/usr/bin/env php

<?php

print_r($argv);

Page 19: PHP-CLI em 7 passos

19

Terminal

$ ./script.php Henrique Moody

Array

(

[0] => ./script.php

[1] => Henrique

[2] => Moody

)

Page 20: PHP-CLI em 7 passos

20

$argc

● Número de parâmetros passados

Page 21: PHP-CLI em 7 passos

21

script.php

#!/usr/bin/env php

<?php

print_r($argc);

Page 22: PHP-CLI em 7 passos

22

Terminal

$ ./script.php

3

Page 23: PHP-CLI em 7 passos

23

$argc + $argv

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

Page 24: PHP-CLI em 7 passos

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

Page 25: PHP-CLI em 7 passos

25

Terminal

$ ./script.php --first Henrique --last Moody

Array

(

[--first] => Henrique

[--last] => Moody

)

Page 26: PHP-CLI em 7 passos

26

getopt()

● Facilita o parser de argumentos

Page 27: PHP-CLI em 7 passos

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

Page 28: PHP-CLI em 7 passos

28

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] =>

)

Page 29: PHP-CLI em 7 passos

29

Bilú que objeto!

Page 30: PHP-CLI em 7 passos

30

Pacotes PHP para CLI scripts

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

Page 31: PHP-CLI em 7 passos

31

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN

Quatro passos

Page 32: PHP-CLI em 7 passos

32

STDIN

● Entrada padrão de dados.

Page 33: PHP-CLI em 7 passos

33

script.php

#!/usr/bin/env php

<?php

echo "Digite o seu nome: ";

$name = fgets(STDIN);

print_r($name);

Page 34: PHP-CLI em 7 passos

34

Terminal

$ ./script.php

Digite o seu nome: Henrique Moody

Henrique Moody

Page 35: PHP-CLI em 7 passos

35

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN;

5) STDOUT

Cinco passos

Page 36: PHP-CLI em 7 passos

36

STDOUT

● Saída padrão de dados.

Page 37: PHP-CLI em 7 passos

37

script.php

#!/usr/bin/env php

<?php

fwrite(STDOUT, 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL);

Page 38: PHP-CLI em 7 passos

38

Terminal

$ ./script.php

Hello, henriquemoody!

Page 39: PHP-CLI em 7 passos

39

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN;

5) STDOUT;

6) STDERR

Seis passos

Page 40: PHP-CLI em 7 passos

40

STDERR

● Saída de erro padrão.

Page 41: PHP-CLI em 7 passos

41

script.php

#!/usr/bin/env php

<?php

fwrite(STDERR, 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL);

Page 42: PHP-CLI em 7 passos

42

Terminal

$ ./script.php

Hello, henriquemoody!

Page 43: PHP-CLI em 7 passos

43

What dá Fuck?

Page 44: PHP-CLI em 7 passos

44

Relaxe os tendões!

Page 45: PHP-CLI em 7 passos

45

STDOUT e STDERR

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

Page 46: PHP-CLI em 7 passos

46

Terminal

$ ./stdout.php

Hello, henriquemoody!

$ ./stderr.php

Hello, henriquemoody!

Page 47: PHP-CLI em 7 passos

47

Terminal

$ ./stderr.php > /dev/null

Hello, henriquemoody!

$ ./stdout.php > /dev/null

Page 48: PHP-CLI em 7 passos

48

Terminal

$ ./stdout.php 2> /dev/null

Hello, henriquemoody!

$ ./stderr.php 2> /dev/null

Page 49: PHP-CLI em 7 passos

49

1) Habilitar PHP-CLI;

2) Shebang;

3) Passagem de argumentos;

4) STDIN;

5) STDOUT;

6) STDERR

7) Exit code

Sete passos

Page 50: PHP-CLI em 7 passos

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.

Page 51: PHP-CLI em 7 passos

51

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

}

Page 52: PHP-CLI em 7 passos

52

Terminal

$ ./script.php

Quanto é 1 + 1? 2

Certa resposta!

$ echo $?

0

Page 53: PHP-CLI em 7 passos

53

Terminal

$ ./script.php

Quanto é 1 + 1? 42

Resposta errada, manolo!

$ echo $?

1

Page 54: PHP-CLI em 7 passos

54

Perguntas?

Page 55: PHP-CLI em 7 passos

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;● Zend\Console: http://goo.gl/SchES;● Symfony\Console: https://github.com/symfony/Console.

Page 56: PHP-CLI em 7 passos

56

Busquem conhecimento