PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

70
PHP na Tela Escura Aplicações Poderosas em Linha de Comando Prof. Rafael Jaques @rafajaques 15º Fórum Internacional de Software Livre #FISL15 09/05/2014

description

A linguagem PHP é conhecida por ser utilizada no desenvolvimento de aplicações web. Essa palestra visa apresentar o outro lado do desenvolvimento. Poucos sabem que é possível utilizar a linguagem para desenvolver tarefas agendadas, ferramentas multi-thread e diversas outras aplicações que rodam em terminal. Nessa palestra exploraremos o mundo do PHP-CLI. Palestra de Rafael Jaques (@rafajaques)

Transcript of PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Page 1: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

PHP na Tela Escura Aplicações Poderosas em Linha de Comando

Prof. Rafael Jaques @rafajaques

15º Fórum Internacional de Software Livre #FISL15

09/05/2014

Page 2: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

"O que é nascido de Deus vence o mundo; e esta é a vitória que

vence o mundo: a nossa fé."1 João 5:4

Page 3: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

www.php-rs.org

Page 4: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Trouxe seu computador?

Page 5: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Experimente junto!

Page 6: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Se você usa Windows, por gentileza, desligue seu computador agora.

Page 7: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Os arquivos de exemplo podem ser baixados em:!

!

www.phpit.com.br/palestras/telaescura/exemplos.tar.gz

Page 8: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Por que usar CLI?

Processamento de dados!

Processos de longa duração!

Instaladores de aplicações!

Ferramentas / Utilidades

Page 9: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Tem como fazer CLI com outras ferramentas?

Óbvio que sim!!

Existem linguagens extremamente poderosas como Perl e Python que

podem muitas vezes ter um desempenho melhor. Tudo é questão

de saber balancear.

Page 10: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Tem como fazer CLI com outras ferramentas?

Facilidade de uso!

Reutilização de código!

Familiaridade!

Utilização de componentes pré-existentes

Page 11: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Exemplos de ferramentasComposer!

PHPUnit!

phpDocumentor!

Phing!

Zend Framework!

Joomla!

PHPlot!

rephlux

Page 12: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Introdução ao PHP-CLI

Page 13: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Experimental no PHP 4.2.0!

Como SAPI no PHP >= 4.3.0

Page 14: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Hello world

Page 15: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

$ php helloworld.php!Hello World!

<?php print "Hello World!"; ?>

Page 16: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo1.php

Page 17: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

She

Page 18: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

$ chmod +x helloworld.php!$ ./helloworld.php!Hello World!

#!/usr/bin/php <?php print "Hello World!"; ?>

Page 19: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

O local do PHP pode variar dependendo do sistema

$ which php!/usr/bin/php

Page 20: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Imprimindo na tela

Page 21: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

print e echo funcionam, mas não são a melhor abordagem

Page 22: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Utilize streams

Page 23: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

php://stdin (leitura) STDIN!

php://stdout (escrita) STDOUT!

php://stderr (escrita) STDERR

Streams do PHP

Page 24: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo2.php

Page 25: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

E a quebra de linha?

Não é HTML! <br> não serve!

\n? \r? \r\n?!

Nada disso! Use PHP_EOL.

Page 26: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Entrada do usuário

Page 27: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Ler a entrada

fgets()!

fread()!

fscanf()!

fgetc()

Page 28: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo3.php

Page 29: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Obtendo dados do sistema

Page 30: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

$_SERVER

$_POST$_GET

Page 31: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Array!(! [SHELL] => /bin/bash! [TERM] => xterm-256color! [SVN_EDITOR] => vim! [USER] => rafajaques! [LANG] => pt_BR.UTF-8! [HOME] => /Users/rafajaques! [_] => /usr/bin/php! [PHP_SELF] => exemplo.php! [SCRIPT_NAME] => exemplo.php! [DOCUMENT_ROOT] => ! [argv] => Array! (! [0] => exemplo.php! )! [argc] => 1!)!

$_SERVER

Page 32: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

$argcContagem de argumentos

$argvValores dos argumentos

Page 33: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

$argc = 6!$argv = Array!(! [0] => ./exemplo.php! [1] => -a! [2] => -u! [3] => usuario! [4] => -p! [5] => --teste!)

./exemplo.php -a -u usuario -p --teste

Page 34: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

getopt()Capturando parâmetros com

Page 35: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo4.php

Page 36: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

readlineMelhorando a experiência com

Page 37: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Quê que faz isso?

Entrada interativa!

Autocompletar!

Histórico de comandos!

E mais uma paulada de coisa…

Page 38: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo5.php

Page 39: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Chamadas para o sistema

Page 40: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

shell_exec( ) ou `chamada`Resultado em uma string

exec( )Retorna só a última linha

passthru( )Envia o resultado para a saída padrão

Page 41: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo6.php

Page 42: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Obtendo informações!do Terminal

Page 43: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Utilize comandos do sistema

tput é uma ferramenta importante!

tput lines - altura do terminal!

tput cols - largura do terminal!

man tput

Page 44: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Descobrir se o stream está sendo redirecionado

$piped = !posix_isatty(STDOUT);

Page 45: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo7.php

Page 46: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Controlando o!terminal

Page 47: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Control CodesA maioria dos control codes possui o prefixo <ESC>!

Posicionar o cursor!

Aplicar cores!

Apagar!

Fazer barulho!

Mover a rolagem!

Muitas outras coisashttp://www.termsys.demon.co.uk/vtansi.htm

Page 48: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

<ESC>!em hexadecimal é!

\033

Page 49: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Control CodesPosicionamento do cursorPra cima \033[{CONTAGEM}A

Pra baixo \033[{CONTAGEM}B

Avançar \033[{CONTAGEM}C

Retroceder \033[{CONTAGEM}D

Forçar posição \033[{LINHA};{COL}f

Salvar posição \0337

Restaurar posição \0338

Page 50: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Control CodesApagando

Apagar tela \033[2J

Apagar linha atual \033[2K

Apagar a linha de cima \033[1J

Apagar a linha de baixo \033[J

Para o início da linha \033[1K

Para o final da linha \033[K

Page 51: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Control CodesEstilo de letra

Reset All 0

Brilho (Negrito) 1

Dim 2

Sublinhado 3

Piscante 4

Invertido 5

Escondido 6

\033[{atributos separados por ;}m

Page 52: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Control CodesCores

Cor Letra FundoPreto 30 40

Vermelho 31 41Verde 32 42

Amarelo 33 43Azul 34 44

Magenta 35 45Ciano 36 46

Branco 37 47

\033[{atributos separados por ;}m

Page 53: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

\033[0mNão se esqueça de restaurar a formatação original do terminal!

Page 54: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

\007Aproveite para tocar o sino quando

necessário! :)

Page 55: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Bifurcando processos

Page 56: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Extensão PCNTLNão vem por padrão

Precisa de --enable-pcntl

Page 57: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Principais funções PCNTL

pcntl_exec( )!

pcntl_fork( )!

pcntl_waitpid( )!

pcntl_signal( )

Page 58: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

exemplo8.php

Page 59: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Daemons

Page 60: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Cronjobs

Page 61: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

# * * * * * comando!# ! ! ! ! !!# " " " " "!# " " " " "!# " " " " #$$$$$ dia da semana (0 - 6) (0=domingo)!# " " " #$$$$$$$$$$ mês (1 - 12)!# " " #$$$$$$$$$$$$$$$ dia do mês (1 - 31)!# " #$$$$$$$$$$$$$$$$$$$$ hora (0 - 23)!# #$$$$$$$$$$$$$$$$$$$$$$$$$ minuto (0 - 59)

crontab -e

Page 62: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Meu artigo sobre processos de longa duração

http://www.phpit.com.br/artigos/trabalhando-processos-longa-

duracao-php.phpit!

ou!

http://is.gd/processos_longos_php

Page 63: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Mais exemplos

Page 64: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

CODE TIME!!!

Exemplos!de 9 a 13

Page 65: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

E agora?Onde mais eu estudo?

Page 66: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Ferramentas/Frameworks de PHP-CLI

• http://etopian.com/software/php-cli-framework/

• http://silly.brainchildprojects.org/

• https://github.com/jlogsdon/php-cli-tools

• Pear Console

• NCurses

Page 67: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Referências• http://www.php.net/manual/pt_BR/features.commandline.php

• http://www.sitepoint.com/php-command-line-1/

• http://www.php-cli.com/

• http://www.openlogic.com/wazi/bid/188037/Building-Command-Line-Applications-with-PHP

• http://silly.brainchildprojects.org/

• http://www.slideshare.net/donatJ1/beautiful-phpcli-scripts

• http://oliversmith.io/technology/2011/10/07/speeding-up-php-using-process-forking-for-image-resizing/

Page 68: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Obrigado!Rafael Jaques!

phpit.com.br!

[email protected]!

@rafajaques - @_phpit!

slideshare.net/rafajaques

Page 69: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Dúvidas?

Page 70: PHP na Tela Escura: Aplicações Poderosas em Linha de Comando

Imagens• http://s42.photobucket.com/user/MikeL1/media/IMG_1495-1.jpg.html

• http://www.berkanaonline.com/wp-content/uploads/2014/02/punching-computer-1600x900.jpg

• http://dgst101.umwblogs.org/files/2013/08/hello-toast.jpg

• https://www.flickr.com/photos/ajmexico/3281139507/

• https://www.flickr.com/photos/maltman23/8073321442

• https://www.flickr.com/photos/shabdaly/3981496754

• http://1.bp.blogspot.com/_LEPZ-o9VCPk/S785W0cEZBI/AAAAAAAARbo/-LYixcV_d34/s1600/ET+computer+kid+happy+surprised.jpg

• http://www.endlessimpact.com/wp-content/uploads/2010/08/computer-woman.jpg

• http://www.mirror-image.com/wp-content/uploads/BroadcastRadioIcon2.jpg

• https://www.flickr.com/photos/small_realm/11189801623

• http://kenvibez.com/wp-content/uploads/2014/02/Allan-Gichigi%E2%80%99s-image-titled-%E2%80%9CCapture-Kenya%E2%80%9D-was-taken-at-Lake-Victoria-and-perfectly-captures-a-fisherman-casting-his-net.jpg

• http://images.skeedz.com/wallpaper/1418.jpg

• http://3.bp.blogspot.com/_VbI3E80F3iA/RulcxI87xFI/AAAAAAAAABs/s6-8lIAbh3o/s1600-h/IMG_2340.JPG

• http://firstworldfacts.com/wp-content/uploads/2013/09/Calling-for-Her-at-Many-Times-in-a-Day.jpg

• http://upload.wikimedia.org/wikipedia/commons/e/e1/Atari_XE_joystick.jpg

• http://leighloueygung.com/wp-content/uploads/2013/11/fork_in_the_road.jpg

• http://www.muehle-glashuette.de/uploads/tx_ivwatch/M1-25-43-CZ_1024x768_01.png