php-cli em 7 passos
DESCRIPTION
Criando scripts CLI com PHPTRANSCRIPT
![Page 1: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/1.jpg)
1
PHP-CLI em 7 passos
![Page 2: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/4.jpg)
4
Bilú quer a concha!
![Page 5: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/6.jpg)
6
Sete passos!
![Page 7: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/7.jpg)
7
1) Habilitar PHP-CLIUm passo
![Page 8: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/9.jpg)
9
1) Habilitar PHP-CLI;
2) Shebang
Dois passos
![Page 10: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/11.jpg)
11
Exemplo
● Scripts em bash iniciam-se com o shebang #!/bin/bash
echo Hello
![Page 12: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/12.jpg)
12
Exemplo
● Scripts em PHP iniciam-se com o shebang #!/bin/php
<?php
echo "Hello";
![Page 13: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/14.jpg)
14
script.php
#!/usr/bin/env php
<?php
echo 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL;
![Page 15: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/15.jpg)
15
Terminal
$ chmod +x script.php
$ ./script.php
Hello, henriquemoody!
![Page 16: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/16.jpg)
16
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos
Três passos
![Page 17: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/17.jpg)
17
$argv
● Array com os valores dos argumentos passados.
![Page 18: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/18.jpg)
18
script.php
#!/usr/bin/env php
<?php
print_r($argv);
![Page 19: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/19.jpg)
19
Terminal
$ ./script.php Henrique Moody
Array
(
[0] => ./script.php
[1] => Henrique
[2] => Moody
)
![Page 20: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/20.jpg)
20
$argc
● Número de parâmetros passados
![Page 21: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/21.jpg)
21
script.php
#!/usr/bin/env php
<?php
print_r($argc);
![Page 22: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/22.jpg)
22
Terminal
$ ./script.php
3
![Page 23: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/23.jpg)
23
$argc + $argv
● Combinação poderoza que permite parsear os argumentos passados
![Page 24: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/25.jpg)
25
Terminal
$ ./script.php --first Henrique --last Moody
Array
(
[--first] => Henrique
[--last] => Moody
)
![Page 26: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/26.jpg)
26
getopt()
● Facilita o parser de argumentos
![Page 27: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/29.jpg)
29
Bilú que objeto!
![Page 30: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/30.jpg)
30
Pacotes PHP para CLI scripts
● Console_Getopt (PEAR);● Zend\Console;● Symfony\Component\Console.
![Page 31: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/31.jpg)
31
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN
Quatro passos
![Page 32: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/32.jpg)
32
STDIN
● Entrada padrão de dados.
![Page 33: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/34.jpg)
34
Terminal
$ ./script.php
Digite o seu nome: Henrique Moody
Henrique Moody
![Page 35: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/35.jpg)
35
1) Habilitar PHP-CLI;
2) Shebang;
3) Passagem de argumentos;
4) STDIN;
5) STDOUT
Cinco passos
![Page 36: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/36.jpg)
36
STDOUT
● Saída padrão de dados.
![Page 37: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/37.jpg)
37
script.php
#!/usr/bin/env php
<?php
fwrite(STDOUT, 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL);
![Page 38: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/38.jpg)
38
Terminal
$ ./script.php
Hello, henriquemoody!
![Page 39: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/40.jpg)
40
STDERR
● Saída de erro padrão.
![Page 41: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/41.jpg)
41
script.php
#!/usr/bin/env php
<?php
fwrite(STDERR, 'Hello, ' . $_SERVER['USER'] . '!' . PHP_EOL);
![Page 42: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/42.jpg)
42
Terminal
$ ./script.php
Hello, henriquemoody!
![Page 43: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/43.jpg)
43
What dá Fuck?
![Page 44: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/44.jpg)
44
Relaxe os tendões!
![Page 45: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/46.jpg)
46
Terminal
$ ./stdout.php
Hello, henriquemoody!
$ ./stderr.php
Hello, henriquemoody!
![Page 47: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/47.jpg)
47
Terminal
$ ./stderr.php > /dev/null
Hello, henriquemoody!
$ ./stdout.php > /dev/null
![Page 48: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/48.jpg)
48
Terminal
$ ./stdout.php 2> /dev/null
Hello, henriquemoody!
$ ./stderr.php 2> /dev/null
![Page 49: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/50.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/51.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/52.jpg)
52
Terminal
$ ./script.php
Quanto é 1 + 1? 2
Certa resposta!
$ echo $?
0
![Page 53: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/53.jpg)
53
Terminal
$ ./script.php
Quanto é 1 + 1? 42
Resposta errada, manolo!
$ echo $?
1
![Page 54: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/54.jpg)
54
Perguntas?
![Page 55: PHP-CLI em 7 passos](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/55.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022012322/549e9df0b37959664b8b4656/html5/thumbnails/56.jpg)
56
Busquem conhecimento