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

download
  • date post

    09-Dec-2014
  • Category

    Software
  • view

    4.880
  • download

    9

Embed Size (px)

description

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

transcript

  • 1. PHP na Tela Escura Aplicaes Poderosas em Linha de Comando Prof. Rafael Jaques @rafajaques 15 Frum Internacional de Software Livre #FISL15 09/05/2014

2. "O que nascido de Deus vence o mundo; e esta a vitria que vence o mundo: a nossa f." 1 Joo 5:4 3. www.php-rs.org 4. Trouxe seu computador? 5. Experimente junto! 6. Se voc usa Windows, por gentileza, desligue seu computador agora. 7. Os arquivos de exemplo podem ser baixados em:! ! www.phpit.com.br/palestras/ telaescura/exemplos.tar.gz 8. Por que usar CLI? Processamento de dados! Processos de longa durao! Instaladores de aplicaes! Ferramentas / Utilidades 9. 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 questo de saber balancear. 10. Tem como fazer CLI com outras ferramentas? Facilidade de uso! Reutilizao de cdigo! Familiaridade! Utilizao de componentes pr- existentes 11. Exemplos de ferramentas Composer! PHPUnit! phpDocumentor! Phing! Zend Framework! Joomla! PHPlot! rephlux 12. Introduo ao PHP-CLI 13. Experimental no PHP 4.2.0! Como SAPI no PHP >= 4.3.0 14. Hello world 15. $ php helloworld.php! Hello World! 16. CODE TIME!! ! exemplo1.php 17. She 18. $ chmod +x helloworld.php! $ ./helloworld.php! Hello World! #!/usr/bin/php 19. O local do PHP pode variar dependendo do sistema $ which php! /usr/bin/php 20. Imprimindo na tela 21. print e echo funcionam, mas no so a melhor abordagem 22. Utilize streams 23. php://stdin (leitura) STDIN! php://stdout (escrita) STDOUT! php://stderr (escrita) STDERR Streams do PHP 24. CODE TIME!! ! exemplo2.php 25. E a quebra de linha? No HTML!
no serve! n? r? rn?! Nada disso! Use PHP_EOL. 26. Entrada do usurio 27. Ler a entrada fgets()! fread()! fscanf()! fgetc() 28. CODE TIME!! ! exemplo3.php 29. Obtendo dados do sistema 30. $_SERVER $_POST $_GET 31. 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 32. $argc Contagem de argumentos $argv Valores dos argumentos 33. $argc = 6! $argv = Array! (! [0] => ./exemplo.php! [1] => -a! [2] => -u! [3] => usuario! [4] => -p! [5] => --teste! ) ./exemplo.php -a -u usuario -p --teste 34. getopt() Capturando parmetros com 35. CODE TIME!! ! exemplo4.php 36. readline Melhorando a experincia com 37. Qu que faz isso? Entrada interativa! Autocompletar! Histrico de comandos! E mais uma paulada de coisa 38. CODE TIME!! ! exemplo5.php 39. Chamadas para o sistema 40. shell_exec( ) ou `chamada` Resultado em uma string exec( ) Retorna s a ltima linha passthru( ) Envia o resultado para a sada padro 41. CODE TIME!! ! exemplo6.php 42. Obtendo informaes! do Terminal 43. Utilize comandos do sistema tput uma ferramenta importante! tput lines - altura do terminal! tput cols - largura do terminal! man tput 44. Descobrir se o stream est sendo redirecionado $piped = !posix_isatty(STDOUT); 45. CODE TIME!! ! exemplo7.php 46. Controlando o! terminal 47. Control Codes A maioria dos control codes possui o prexo ! Posicionar o cursor! Aplicar cores! Apagar! Fazer barulho! Mover a rolagem! Muitas outras coisas http://www.termsys.demon.co.uk/vtansi.htm 48. ! em hexadecimal ! 033 49. Control Codes Posicionamento do cursor Pra cima 033[{CONTAGEM}A Pra baixo 033[{CONTAGEM}B Avanar 033[{CONTAGEM}C Retroceder 033[{CONTAGEM}D Forar posio 033[{LINHA};{COL}f Salvar posio 0337 Restaurar posio 0338 50. Control Codes Apagando 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 incio da linha 033[1K Para o nal da linha 033[K 51. Control Codes Estilo de letra Reset All 0 Brilho (Negrito) 1 Dim 2 Sublinhado 3 Piscante 4 Invertido 5 Escondido 6 033[{atributos separados por ;}m 52. Control Codes Cores Cor Letra Fundo Preto 30 40 Vermelho 31 41 Verde 32 42 Amarelo 33 43 Azul 34 44 Magenta 35 45 Ciano 36 46 Branco 37 47 033[{atributos separados por ;}m 53. 033[0m No se esquea de restaurar a formatao original do terminal! 54. 007 Aproveite para tocar o sino quando necessrio! :) 55. Bifurcando processos 56. Extenso PCNTL No vem por padro Precisa de --enable-pcntl 57. Principais funes PCNTL pcntl_exec( )! pcntl_fork( )! pcntl_waitpid( )! pcntl_signal( ) 58. CODE TIME!! ! exemplo8.php 59. Daemons 60. Cronjobs 61. # * * * * * comando! # ! ! ! ! !! # " " " " "! # " " " " "! # " " " " #$$$$$ dia da semana (0 - 6) (0=domingo)! # " " " #$$$$$$$$$$ ms (1 - 12)! # " " #$$$$$$$$$$$$$$$ dia do ms (1 - 31)! # " #$$$$$$$$$$$$$$$$$$$$ hora (0 - 23)! # #$$$$$$$$$$$$$$$$$$$$$$$$$ minuto (0 - 59) crontab -e 62. Meu artigo sobre processos de longa durao http://www.phpit.com.br/artigos/ trabalhando-processos-longa- duracao-php.phpit! ou! http://is.gd/processos_longos_php 63. Mais exemplos 64. CODE TIME!! ! Exemplos! de 9 a 13 65. E agora? Onde mais eu estudo? 66. 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 67. Referncias 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/ 68. Obrigado! Rafael Jaques! phpit.com.br! rafa@php.net! @rafajaques - @_phpit! slideshare.net/rafajaques 69. Dvidas? 70. 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/les/2013/08/hello-toast.jpg https://www.ickr.com/photos/ajmexico/3281139507/ https://www.ickr.com/photos/maltman23/8073321442 https://www.ickr.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.ickr.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-sherman-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://rstworldfacts.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