PHP - Programação para seres humanos

44
PHP: Programação para Seres Humanos Carlos Henrique R. de Souza XX.Sepai.Belém.PA Outubro de 2006

Transcript of PHP - Programação para seres humanos

Page 1: PHP - Programação para seres humanos

PHP: Programação para Seres Humanos

Carlos Henrique R. de SouzaXX.Sepai.Belém.PAOutubro de 2006

Page 2: PHP - Programação para seres humanos

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

Page 3: PHP - Programação para seres humanos

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 

Page 4: PHP - Programação para seres humanos

Paradigmas

Client­Side  Vantagens:

Alicerce robusto Controle sobre os recursos Liberdade local

Desvantagens: Desenvolvimento ‘do zero’ Liberdade local Bugfix

Page 5: PHP - Programação para seres humanos

Paradigmas

Server­Side

Page 6: PHP - Programação para seres humanos

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

Page 7: PHP - Programação para seres humanos

A Web

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”

Total Sites Across All Domains August 1995 ­ October 2006 

Page 8: PHP - Programação para seres humanos

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

Page 9: PHP - Programação para seres humanos

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>

Page 10: PHP - Programação para seres humanos

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!”;?>

Page 11: PHP - Programação para seres humanos

O que é PHP ?

PHP­GTK Gimp Tool Kit

Bibliotecas escritas em C Client/Server­Side Cross­platform

Page 12: PHP - Programação para seres humanos

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

Características

Page 13: PHP - Programação para seres humanos

Características

Extensões: GD (imagens), LDAP, SNMP, SOAP, IMAP, FTP, 

MCAL, IMSP, Java, Curl, gettext, SWF, CCVS, zlib, etc...

Page 14: PHP - Programação para seres humanos

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

Page 15: PHP - Programação para seres humanos

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("Java+PHP"); echo "Método do Java = " . $javaPHP->getNome(); ?>

ex: PHPBrasil

Page 16: PHP - Programação para seres humanos

Características

Sintaxe simples, semelhante a Perl e CPerl:$conn = Pg::connectdb("dbname=foo host=localhost user=root password=123");

PHP:$conn = pg_connect("host=localhost dbname=foo user=root password=123")

Otimizadores APC, Zend Optimizer, Turck MMCache

Page 17: PHP - Programação para seres humanos

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

Page 18: PHP - Programação para seres humanos

Fatos

19.491.324 Domains 1.313.977 IP Addresses fonte: netcraft

Page 19: PHP - Programação para seres humanos

Fatos

“Top 10 Programming Languages”

fonte: tiobe

Page 20: PHP - Programação para seres humanos

Fatos

fonte: nexen

Page 21: PHP - Programação para seres humanos

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

Page 22: PHP - Programação para seres humanos

IDEs

Open­Source: Eclipse (PHPEclipse, PHP­IDE), Tulip, 

PHPDesigner Proprietárias:

Zend Studio, Dreamweaver

Page 23: PHP - Programação para seres humanos

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

Page 24: PHP - Programação para seres humanos

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

}}

Page 25: PHP - Programação para seres humanos

Orientação a Objetos

modificadores de acesso public private protected

class Funcionario { public $nome;protected $telefone;private $salario;

Page 26: PHP - Programação para seres humanos

Orientação a Objetos

__set(), __get(), __call()class Pessoa {

  private $dt_nascimento;

  function __set($atributo, $valor){    if($atributo == "dt_nascimento"){   $dt_nascimento = implode("­",array_reverse(explode("/",$valor)));

}    }

}

$p1 = new Pessoa();$p1­>dt_nascimento = "03/09/1984"; // ... dt_nascimento = 1984­09­03

Page 27: PHP - Programação para seres humanos

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

Page 28: PHP - Programação para seres humanos

Orientação a Objetos

__set(), __get(), __call()class Guitarra {

  private $cordas;  private $captadores;

  function __call($metodo, $args){   echo "@#&!! $metodo não existe para a classe guitarra !";  }}

$a = new Guitarra();$a­>tocarUmPagodao();

Page 29: PHP - Programação para seres humanos

Orientação a Objetos

interfaces

interface IPessoa{

function fazerObrigacoes();function seDivertir();

}

Page 30: PHP - Programação para seres humanos

Orientação a Objetos

interfacesclass 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; }}

Page 31: PHP - Programação para seres humanos

Orientação a Objetos

interfacesclass 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; }}

Page 32: PHP - Programação para seres humanos

Orientação a Objetos

interfacesclass Deus{

function julgar(IPessoa $p){

if(!$p­>getObrigacoes()){echo “Faça já suas obrigações!”;$p­>fazerObrigacoes();

}$p­>setDivertir();

}}

Page 33: PHP - Programação para seres humanos

Orientação a Objetos

interfaces$objPessoa1 = new Garoto();Deus::julgar($objPessoa);

Fazer meu dever de casaJogar playstation

$objPessoa2 = new Adulto();Deus::julgar($objPessoa2);

Trabalhar para pagar o PS do meu filhoVerei o Papão jogar

Page 34: PHP - Programação para seres humanos

Orientação a Objetos

classes e métodos abstratos propriedades estáticas clonagem manipulação de erros (try/catch)

Page 35: PHP - Programação para seres humanos

Frameworks

Genial, ClassGenerator, MetaClass, Smarty, PRADO, CakePHP, Symfony, etc.

“ Não reinvente a roda, mas saiba como ela foi feita ”

Page 36: PHP - Programação para seres humanos

Content Management System (CMS) Portais:

Joomla, Mambo, PHP­Nuke, etc ... Blogs:

Wordpress, simplog eCommerce:

phpShop, XT­Commerce GroupWare:

NetOffice, PHPGroupWare

Page 37: PHP - Programação para seres humanos

Segurança

SQLInjection XSS Engenharia Social 

Page 38: PHP - Programação para seres humanos

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!

Page 39: PHP - Programação para seres humanos

SQL Injection

Ajudam a evitar ataques de SQLInjection: addslashes mysql_real_escape_string magic_quotes

Page 40: PHP - Programação para seres humanos

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

Page 41: PHP - Programação para seres humanos

Cross-Site Scripting (XSS)

Ajudam a evitar ataques de XSS strip_tags htmlentities

Sempre validar entrada e SAÍDA!

Page 42: PHP - Programação para seres humanos

Engenharia Social

Independente de tecnologia Caso Paris Hilton Caso Harvard Business School “ Não existe patch para falha humana...”

Page 43: PHP - Programação para seres humanos

Conclusões

PHP – programação para seres­humanos e situações humanas no planeta Terra !

“ Quando tudo que se tem é um martelo... ”

Page 44: PHP - Programação para seres humanos

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 [email protected] www.equilibriumweb.com www.step2rock.com

Grupo phppaidegua­[email protected]