Upload
caike-souza
View
1.827
Download
7
Embed Size (px)
Citation preview
PHP: Programação para Seres Humanos
Carlos Henrique R. de SouzaXX.Sepai.Belém.PAOutubro de 2006
Agenda Objetivo Paradigmas A Web O que é PHP / PHPCLI / PHPGTK Características / Fatos Primeiros passos IDE Orientação a Objetos Frameworks CMS Segurança Conclusões
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
Paradigmas
ClientSide Vantagens:
Alicerce robusto Controle sobre os recursos Liberdade local
Desvantagens: Desenvolvimento ‘do zero’ Liberdade local Bugfix
Paradigmas
ServerSide
Paradigmas
ServerSide 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
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
O que é PHP ?
Uma linguagem de programação opensource e de propósitosgerais
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
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>
O que é PHP ?
PHPCLI Command Line Interpreter Uso similar a bash, perl, awk ClientSide Cron tasks
#!/usr/bin/php –q<?echo “PHP aqui também!”;?>
O que é PHP ?
PHPGTK Gimp Tool Kit
Bibliotecas escritas em C Client/ServerSide Crossplatform
Independente de Plataforma Linux, HPUX, Mac OS X, Win32 (NT/W95/W98/W2000),
BeOS, Solaris Servidores
Apache, MSIIS / PWS, Xitami Suporte nativo a diversos SGBDs
Adabas D, dBase, Empress, FilePro (apenas leitura), Hyperware, IBM DB2, Informix, Ingres, Interbase, FrontBase, mSQL, Direct MSSQL, MySQL, ODBC, Oracle (OCI7 e OCI8), Ovrimos, PostgreSQL, SQLite, Solid, Sybase, Velocis, Unix dbm
Características
Características
Extensões: GD (imagens), LDAP, SNMP, SOAP, IMAP, FTP,
MCAL, IMSP, Java, Curl, gettext, SWF, CCVS, zlib, etc...
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
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
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
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
Fatos
19.491.324 Domains 1.313.977 IP Addresses fonte: netcraft
Fatos
“Top 10 Programming Languages”
fonte: tiobe
Fatos
fonte: nexen
Primeiros Passos
Opção 1: LAMP Linux com APTGET
aptget install apache2 php5 mysqlserver php5mysql mysqlquerybrowser
Compilações e instalações independentes Opção 2: WAMP
EasyPHP (7.7mb) Instalações independentes
IDEs
OpenSource: Eclipse (PHPEclipse, PHPIDE), Tulip,
PHPDesigner Proprietárias:
Zend Studio, Dreamweaver
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
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) ;
}}
Orientação a Objetos
modificadores de acesso public private protected
class Funcionario { public $nome;protected $telefone;private $salario;
}
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 = 19840903
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
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();
Orientação a Objetos
interfaces
interface IPessoa{
function fazerObrigacoes();function seDivertir();
}
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; }}
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; }}
Orientação a Objetos
interfacesclass Deus{
function julgar(IPessoa $p){
if(!$p>getObrigacoes()){echo “Faça já suas obrigações!”;$p>fazerObrigacoes();
}$p>setDivertir();
}}
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
Orientação a Objetos
classes e métodos abstratos propriedades estáticas clonagem manipulação de erros (try/catch)
Frameworks
Genial, ClassGenerator, MetaClass, Smarty, PRADO, CakePHP, Symfony, etc.
“ Não reinvente a roda, mas saiba como ela foi feita ”
Content Management System (CMS) Portais:
Joomla, Mambo, PHPNuke, etc ... Blogs:
Wordpress, simplog eCommerce:
phpShop, XTCommerce GroupWare:
NetOffice, PHPGroupWare
Segurança
SQLInjection XSS Engenharia Social
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!
SQL Injection
Ajudam a evitar ataques de SQLInjection: addslashes mysql_real_escape_string magic_quotes
Cross-Site Scripting (XSS)
Informação de um contexto (nãoconfiável) é inserida em outro contexto
Link em um email: 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>
Cross-Site Scripting (XSS)
Ajudam a evitar ataques de XSS strip_tags htmlentities
Sempre validar entrada e SAÍDA!
Engenharia Social
Independente de tecnologia Caso Paris Hilton Caso Harvard Business School “ Não existe patch para falha humana...”
Conclusões
PHP – programação para sereshumanos e situações humanas no planeta Terra !
“ Quando tudo que se tem é um martelo... ”
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/wwwhistory/
Contato [email protected] www.equilibriumweb.com www.step2rock.com
Grupo phppaidegua[email protected]