Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHP - Programação para seres humanos

1,832 views

Published on

Uma introdução ao PHP.

An introductory presentation about the PHP language and platform.

Published in: Technology

PHP - Programação para seres humanos

  1. 1. PHP: Programação para Seres Humanos Carlos Henrique R. de Souza XX.Sepai.Belém.PA Outubro de 2006
  2. 2. Agenda Objetivo  Paradigmas  A Web  O que é PHP / PHP­CLI / PHP­GTK  Características / Fatos  Primeiros passos  IDE   Orientação a Objetos  Frameworks  CMS  Segurança  Conclusões 
  3. 3. Objetivo Desenvolvimento em PHP  Iniciantes em PHP  Iniciantes em outras linguagens  Alunos de cursos técnicos  / graduaçao em TI  Entusiastas  Quando usá­lo  Quando não usá­lo  
  4. 4. Paradigmas Client­Side   Vantagens:  Alicerce robusto  Controle sobre os recursos  Liberdade local  Desvantagens:  Desenvolvimento ‘do zero’  Liberdade local  Bugfix 
  5. 5. Paradigmas Server­Side 
  6. 6. Paradigmas Server­Side   Vantagens:  Interface pré­modelada  Maior acessibilidade  Bugfix  Desvantagens:  Pouca (quase nenhuma) informação sobre cliente  Preocupação com tráfego  Popularização no desenvolvimento de aplicações 
  7. 7. A Web Total Sites Across All Domains August 1995 ­ October 2006  Em novembro de 1992 – 26 servidores web fonte: netcraft  Em outubro de 2006 – 98 milhões de ‘hostnames’  “A internet náo é uma rede de computadores, mas sim de pessoas”
  8. 8. O que é PHP ? Uma linguagem de programação open­  source e de propósitos­gerais Criada por Rasmus Lerdof em 1995 (PHP/FI)  Reescrita por Andi Gtmans e Zeev Suraszi   (Zend) em 1997 – PHP3 Utilizada especialmente para   desenvolvimento web (procedural e/ou OO) Misturada com HTML  TODO código PHP é interpretado no servidor 
  9. 9. O que é PHP ? arquivo.php (no servidor)  <html> <p><b><? echo “Olá, Mundo!” ?></b></p> </html> arquivo.php (no cliente)  <html> <p><b>Olá, Mundo!</b></p> </html>
  10. 10. O que é PHP ? PHP­CLI  Command Line Interpreter  Uso similar a bash, perl, awk  Client­Side  Cron tasks  #!/usr/bin/php –q <? echo “PHP aqui também!”; ?>
  11. 11. O que é PHP ? PHP­GTK  Gimp Tool Kit  Bibliotecas escritas em C  Client/Server­Side  Cross­platform 
  12. 12. Características Independente de Plataforma  Linux, HP­UX, Mac OS X, Win32 (NT/W95/W98/W2000),   BeOS, Solaris Servidores  Apache, MS­IIS / PWS, Xitami  Suporte nativo a diversos SGBDs  Adabas D, dBase, Empress, FilePro (apenas leitura),   Hyperware, IBM DB2, Informix, Ingres, Interbase,  FrontBase, mSQL, Direct MS­SQL, MySQL, ODBC, Oracle  (OCI7 e OCI8), Ovrimos, PostgreSQL, SQLite, Solid,  Sybase, Velocis, Unix dbm
  13. 13. Características Extensões:  GD (imagens), LDAP, SNMP, SOAP, IMAP, FTP,   MCAL, IMSP, Java, Curl, gettext, SWF, CCVS,  zlib, etc...
  14. 14. Características Tipagem dinâmica (‘duck’ typing) e   conversão automática If ( funcao_foo($arg_foo) ) { ... fazer algo ... } Funções suficientes! tipo int ou String 
  15. 15. Características Integração com outras linguagens  (Java, Perl, MS.net , etc.)  public class JavaPHP {     private String nome = null;     public void setNome(String nome) {         this.nome = nome;     }     public String getNome() {         return nome;     } } <? $javaPHP = new Java('JavaPHP'); $javaPHP->setNome(quot;Java+PHPquot;); echo quot;Método do Java = quot; . $javaPHP->getNome(); ?> ex: PHPBrasil
  16. 16. Características Sintaxe simples, semelhante a Perl e C  Perl: $conn = Pg::connectdb(quot;dbname=foo host=localhost user=root password=123quot;); PHP: $conn = pg_connect(quot;host=localhost dbname=foo user=root password=123quot;) Otimizadores  APC, Zend Optimizer, Turck MMCache 
  17. 17. Características Arrays  Ordenados  <?  $vetor[0] = “primeiro”; $vetor[1] = “segundo”; $vetor[] = “terceiro”;  ?> Associativos  <?  $vetor[‘caike’] = “php”; $vetor[‘jamesgoslin’] = “java”; $vetor[‘joselito’] = “asp”;  ?> 48 funções para array 
  18. 18. Fatos 19.491.324 Domains  1.313.977 IP Addresses  fonte: netcraft
  19. 19. Fatos “Top 10 Programming Languages” fonte: tiobe
  20. 20. Fatos fonte: nexen
  21. 21. Primeiros Passos Opção 1: LAMP  Linux com APT­GET  apt­get install apache2 php5 mysql­server php5­mysql   mysql­query­browser Compilações e instalações independentes  Opção 2: WAMP  EasyPHP (7.7mb)  Instalações independentes 
  22. 22. IDEs Open­Source:  Eclipse (PHPEclipse, PHP­IDE), Tulip,   PHPDesigner Proprietárias:  Zend Studio, Dreamweaver 
  23. 23. Orientação a Objetos Inspiraçao no mundo real  Introduzida no PHP 3  Reescrita para o PHP 4, mas ainda   insuficiente PHP5 = OO madura e similar a outras   linguagens
  24. 24. Orientação a Objetos construtores e destrutores padrão  class BD{ var $conn; function __construct($host, $user, $pw){ $this­>conn = mysql_connect($host,$user,$pw); } function __destruct($host, $user, $pass){ mysql_close($this­>conn) ; } }
  25. 25. Orientação a Objetos modificadores de acesso  public  private  protected  class Funcionario {  public $nome; protected $telefone; private $salario; } 
  26. 26. Orientação a Objetos __set(), __get(), __call()  class Pessoa {   private $dt_nascimento;   function __set($atributo, $valor){     if($atributo == quot;dt_nascimentoquot;){    $dt_nascimento = implode(quot;­quot;,array_reverse(explode(quot;/quot;,$valor))); }     } } $p1 = new Pessoa(); $p1­>dt_nascimento = quot;03/09/1984quot;; // ... dt_nascimento = 1984­09­03
  27. 27. Orientação a Objetos __set(), __get(), __call()  class Conta {   private $saldo;   private $limite = 100;   function setSaldo() ...   function __get($at){    if($at == “saldo”) return $this­>saldo + $this­>limite;   } } $p1 = new Conta(); $p1­>setSaldo(200); echo $p1­>saldo; // 300
  28. 28. Orientação a Objetos __set(), __get(), __call()  class Guitarra {   private $cordas;   private $captadores;   function __call($metodo, $args){    echo quot;@#&!! $metodo não existe para a classe guitarra !quot;;   } } $a = new Guitarra(); $a­>tocarUmPagodao();
  29. 29. Orientação a Objetos interfaces  interface IPessoa{ function fazerObrigacoes(); function seDivertir(); }
  30. 30. Orientação a Objetos interfaces  class Garoto implements IPessoa{ private $obrigacoes = false; function fazerObrigacoes(){ echo “Fazer meu dever de casa”; $this­>obrigacoes = true; } function seDivertir(){ echo “Jogar playstation”; } function getObrigacoes(){ return $this­>obrigacoes; } }
  31. 31. Orientação a Objetos interfaces  class Adulto implements IPessoa{ private $obrigacoes = false; function fazerObrigacoes(){ echo “Trabalhar para pagar o PS do meu filho”;  $this­>obrigacoes = true; } function seDivertir(){ echo “Verei o Papão jogar!”; } function getObrigacoes(){ return $this­>obrigacoes; } }
  32. 32. Orientação a Objetos interfaces  class Deus{ function julgar(IPessoa $p){ if(!$p­>getObrigacoes()){ echo “Faça já suas obrigações!”; $p­>fazerObrigacoes(); } $p­>setDivertir(); } }
  33. 33. Orientação a Objetos interfaces  $objPessoa1 = new Garoto(); Deus::julgar($objPessoa); Fazer meu dever de casa Jogar playstation $objPessoa2 = new Adulto(); Deus::julgar($objPessoa2); Trabalhar para pagar o PS do meu filho Verei o Papão jogar
  34. 34. Orientação a Objetos classes e métodos abstratos  propriedades estáticas  clonagem  manipulação de erros (try/catch) 
  35. 35. Frameworks Genial, ClassGenerator, MetaClass, Smarty,   PRADO, CakePHP, Symfony, etc. “ Não reinvente a roda, mas saiba como ela   foi feita ”
  36. 36. Content Management System (CMS) Portais:  Joomla, Mambo, PHP­Nuke, etc ...  Blogs:  Wordpress, simplog  eCommerce:  phpShop, XT­Commerce  GroupWare:  NetOffice, PHPGroupWare 
  37. 37. Segurança SQLInjection  XSS  Engenharia Social  
  38. 38. SQL Injection Manipulação dos scripts SQL  $sql= “... WHERE nome = `$_POST[`nome`]` AND senha = ‘$_POST[`senha`]`”; Login: bla’ or 1 = 1 – Senha: 123 $sql =  “... WHERE nome = ‘bla’ or 1 =1 ­­ ` AND senha = ‘123`”; Sempre validar entrada, SEMPRE! 
  39. 39. SQL Injection Ajudam a evitar ataques de SQLInjection:  addslashes  mysql_real_escape_string  magic_quotes 
  40. 40. Cross-Site Scripting (XSS) Informação de um contexto (não­confiável) é inserida   em outro contexto Link em um e­mail: Fotos daquela sua amiga na festa  <a href =  quot;http://xpto.com/?param=<script>...</script>”> Fotos daquela sua amiga na festa </a> <a href = “http://tinyurl.com/y6tz8”> Fotos daquela sua amiga na festa </a>
  41. 41. Cross-Site Scripting (XSS) Ajudam a evitar ataques de XSS  strip_tags  htmlentities  Sempre validar entrada e SAÍDA! 
  42. 42. Engenharia Social Independente de tecnologia  Caso Paris Hilton  Caso Harvard Business School  “ Não existe patch para falha humana...” 
  43. 43. Conclusões PHP – programação para seres­humanos e   situações humanas no planeta Terra ! “ Quando tudo que se tem é um martelo... ” 
  44. 44. Fim Referências  www.php.net  www.netcraft.com  www.opensourcecms.com  www.nexen.net  www.tiobe.com  http://ref.web.cern.ch/ref/CERN/CNL/2001/001/www­history/  Contato  carloshrsouza@equilibriumweb.com  www.equilibriumweb.com  www.step2rock.com  Grupo  phppaidegua­subscribe@yahoogroups.com 

×