Você está na página 1de 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Curso de Aplicaoes WEB em PHP


Autor: Mauricio Vivas
mauricio@cipsga.org.br Junho de 2000

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Curso de Aplicaoes WEB em PHP Comite de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA
Autor:

Mauricio Vivas
mauricio@cipsga.org.br mauricio@vivas.com.br Junho de 2000

Copyright (c) 2000, Mauricio Vivas. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
Copyright (c) 2000, Mauricio Vivas E garantida a permisso para copiar, distribuir e/ou modificar este documento sob os termos da GNU Free Documentation License, verso 1.1 ou qualquer outra verso posterior publicada pela Free Software Foundation; sem obrigatoriedade de Sees Invariantes na abertura e ao final dos textos. Uma copia da licena deve ser includa na seo intitulada GNU Free Documentation License.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

ndice geral
01. INTRODUO................................................................................................................................ 8 CLIENT-SIDE SCRIPTS 8 SERVER-SIDE SCRIPTS 8 O QUE PHP? 9 O QUE PODE SER FEITO COM PHP? COMO SURGIU A LINGUAGEM PHP? O MTODO GET 10 HEADERS 11 O MTODO POST 11 UTILIZANDO GET E POST

9 9

02. ENVIANDO DADOS PARA O SERVIDOR HTTP.........................................................................10

12

03. FORMULRIOS HTML................................................................................................................. 12 DEFININDO UM FORMULRIO 12 A TAG <INPUT> 13 CAMPO DE TEXTO 13 Parmetros: 13 CAMPO DE TEXTO COM MSCARA Parmetros: 14 CHECKBOX 14 Parmetros: 14 RADIO BUTTON 14 Parmetros: 14 SUBMIT BUTTON 14 Parmetros: 14 RESET BUTTON 15 Parmetros: 15 BUTTON 15 Parmetros: 15 TEXTAREA 15 Parmetros: 15 SELECT 15 Parmetros: 16 UPLOAD DE ARQUIVOS 16 Parmetros: 16 SERVIDOR APACHE PHP 17 MYSQL 18 16

13

04. INSTALAO E CONFIGURAO EM AMBIENTE WINDOWS................................................16

05. INSTALAO E CONFIGURAO EM AMBIENTE LINUX REDHAT........................................18 (DISPONVEL NA PRXIMA VERSO) DELIMITANDO O CDIGO PHP 19 SEPARADOR DE INSTRUES 19 NOMES DE VARIVEIS 19 COMENTRIOS 19 Comentrios de uma linha: 20 Comentrios de mais de uma linha: IMPRIMINDO CDIGO HTML 20 18 06. SINTAXE BSICA........................................................................................................................ 19

20

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA 07. TIPOS............................................................................................................................................ 21 TIPOS SUPORTADOS 21 Inteiros (integer ou long) 21 Nmeros em Ponto Flutuante (double ou float) 21 Strings 22
Significado 22

Arrays
Listas

22
23

Objetos 24 Booleanos 24 TRANSFORMAO DE TIPOS 24 Coeres 24 Transformao explcita de tipos Com a funo settype 25 ARITMTICOS 26 DE STRINGS 26
DE ATRIBUIO 26 BIT A BIT 27 LGICOS 27 COMPARAO 27 EXPRESSO CONDICIONAL 27 DE INCREMENTO E DECREMENTO 28

25

08. OPERADORES............................................................................................................................. 26

09. ESTRUTURAS DE CONTROLE................................................................................................... 28 BLOCOS 28 COMANDOS DE SELEO if 29 switch 30


COMANDOS DE REPETIO

29 32

while 32 do... while 32 for 33 QUEBRA DE FLUXO Break 33 Continue 34 33

10. FUNES..................................................................................................................................... 34 DEFININDO FUNES 34 VALOR DE RETORNO 36 ARGUMENTOS 36 Passagem de parmetros por referncia 36 Argumentos com valores pr-definidos (default)37 CONTEXTO 37 ESCOPO 38 11. VARIVEIS E CONSTANTES....................................................................................................... 39 DECLARAO DE UMA VARIVEL O MODIFICADOR STATIC 39 VARIVEIS VARIVEIS 40 VARIVEIS ENVIADAS PELO NAVEGADOR URLencode 40 Utilizando arrays 41 VARIVEIS DE AMBIENTE 41 VERIFICANDO O TIPO DE UMA VARIVEL Funo que retorna o tipo da varivel Funes que testam o tipo da varivel 39 40

41 41 42 www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Curso de Aplicaoes WEB em PHP -

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA DESTRUINDO UMA VARIVEL 42 VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR A funo isset 42 A funo empty 43 CONSTANTES PR-DEFINIDAS 43 DEFININDO CONSTANTES 43 CLASSE 43 OBJETO 44 A VARIVEL $THIS SUBCLASSES 45 CONSTRUTORES 42

12. CLASSES E OBJETOS................................................................................................................ 43

44 45

13. NOES DE SQL......................................................................................................................... 46 INTRODUO 46 ESTRUTURA DAS TABELAS 46 Comando Create 46 Comando Drop 47 Comando Alter 47 MANIPULANDO DADOS DAS TABELAS Comando SELECT 47 Comando INSERT 48 Comando UPDATE 48 Comando DELETE 48

47

14. ACESSANDO O MYSQL VIA PHP............................................................................................... 49 ESTABELECENDO CONEXES 49 SELECIONANDO A BASE DE DADOS 50 REALIZANDO CONSULTAS 50 Apagando o resultado 50 Nmero de linhas 50 Utilizando os resultados 50 Alterando o ponteiro de um resultado 51 15. ACESSANDO O POSTGRESQL VIA PHP...................................................................................51 ESTABELECENDO CONEXES 51 REALIZANDO CONSULTAS 52 Verificando o erro na execuo de uma query Apagando o resultado 52 Nmero de linhas 52 Utilizando os resultados 52

52

16. UTILIZANDO HEADERS.............................................................................................................. 53 17. UTILIZANDO COOKIES............................................................................................................... 55 O QUE SO 55 GRAVANDO COOKIES 55 LENDO COOKIES GRAVADOS

55

18. MANIPULANDO ARQUIVOS........................................................................................................ 56 COPIANDO ARQUIVOS 56 VERIFICANDO O TAMANHO DE UM ARQUIVO 56 VERIFICANDO SE UM ARQUIVO EXISTE 56 LIMPANDO O CACHE 57 ABRINDO ARQUIVOS PARA LEITURA E/OU ESCRITA 57 LENDO DE UM ARQUIVO 58 ESCREVENDO EM UM ARQUIVO 59 EXEMPLO 59 Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA UPLOADS COM FORMULRIOS HTML 59

19. ENVIANDO E-MAIL...................................................................................................................... 60 20. BIBLIOGRAFIA E REFERNCIAS............................................................................................... 61 APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS.....................................................62 FUNES RELACIONADAS A HTML htmlspecialchars 62 htmlentities 62 nl2br 62 get_meta_tags 62 strip_tags 63 urlencode 63 urldecode 63 FUNES RELACIONADAS A ARRAYS Implode e join 64 split 64 explode 64 COMPARAES ENTRE STRINGS 64 similar_text 64 strcasecmp 65 strcmp 65 strstr 65 stristr 65 strpos 65 strrpos 66 FUNES PARA EDIO DE STRINGS chop 66 ltrim 66 trim 66 strrev 66 strtolower 67 strtoupper 67 ucfirst 67 ucwords 67 str_replace 67 FUNES DIVERSAS 68 chr 68 ord 68 echo 68 print 68 strlen 68 FUNES GENRICAS 69 Array 69 range 69 shuffle 70 sizeof 70 FUNES DE NAVEGAO reset 70 end70 next 70 prev 70 pos 70 key 71 each 71 FUNES DE ORDENAO sort 71 62

64

66

APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS.......................................................69

70

71

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA rsort asort arsort ksort usort uasort uksort 71 72 72 72 72 72 72

APNDICE 03 TIPOS SUPORTADOS PELO MYSQL....................................................................74 NUMRICOS 74 DATA E HORA 74 STRINGS 75 NOTAS DO AUTOR............................................................................................................................ 76 CONTROLE DE VERSES................................................................................................................ 77 GNU FREE DOCUMENTATION LICENSE......................................................................................... 78

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

01. Introduo
Client-Side Scripts
So responsveis pelas aes executadas no browser, sem contato com o servidor. Os exemplos mais comuns de aplicaes client-side so imagens e textos que mudam com o passar do mouse. Os scripts client-side so muito teis para fazer validaes de formulrios sem utilizar processamento do servidor e sem provocar trfego na rede. Outra utilizao comum na construo de interfaces dinmicas e leves.

Figura 1. Funcionamento de scripts client-side

Server-Side Scripts
Os scripts server-side so responsveis pela criao de pginas em tempo real. Num mecanismo de busca, por exemplo, seria invivel manter um arquivo para cada consulta a ser realizada. O que existe um modelo da pgina de resposta, que mesclado com os dados no momento em que a pgina requisitada.

Figura 2. Requisio Normal

Figura 3. Requisio de pgina dinmica

O que PHP?
PHP uma linguagem que permite criar sites WEB dinmicos, possibilitando uma interao com o usurio atravs de formulrios, parmetros da URL e links. A diferena de PHP com relao a linguagens semelhantes a Javascript que o cdigo PHP executado no servidor, sendo enviado para o cliente apenas html puro. Desta maneira possvel interagir com bancos de dados e aplicaes existentes no servidor, com a vantagem de no expor o cdigo fonte para o cliente. Isso pode ser til quando o programa est lidando com senhas ou qualquer tipo de informao confidencial.
O que diferencia PHP de um script CGI escrito em C ou Perl que o cdigo PHP fica embutido no prprio HTML, enquanto no outro caso necessrio que o script CGI gere todo o cdigo HTML, ou leia de um outro arquivo.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

O que pode ser feito com PHP?


Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser feita tambm com PHP, como coletar dados de um formulrio, gerar pginas dinamicamente ou enviar e receber cookies. PHP tambm tem como uma das caractersticas mais importantes o suporte a um grande nmero de bancos de dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Construir uma pgina baseada em um banco de dados torna-se uma tarefa extremamente simples com PHP. Alm disso, PHP tem suporte a outros servios atravs de protocolos como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir sockets e interagir com outros protocolos.

Como surgiu a linguagem PHP?


A linguagem PHP foi concebida durante o outono de 1994 por Rasmus Lerdorf. As primeiras verses no foram disponibilizadas, tendo sido utilizadas em sua home-page apenas para que ele pudesse ter informaes sobre as visitas que estavam sendo feitas. A primeira verso utilizada por outras pessoas foi disponibilizada em 1995, e ficou conhecida como Personal Home Page Tools (ferramentas para pgina pessoal). Era composta por um sistema bastante simples que interpretava algumas macros e alguns utilitrios que rodavam por trs das home-pages: um livro de visitas, um contador e algumas outras coisas. Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI, o FI veio de um outro pacote escrito por Rasmus que interpretava dados de formulrios HTML ( Form Interpreter). Ele combinou os scripts do pacote Personal Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que cresceu bastante, e as pessoas passaram a contribuir com o projeto. Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo, e em meados de 1997 esse nmero subiu para mais de 50.000. Nessa poca houve uma mudana no desenvolvimento do PHP. Ele deixou de ser um projeto de Rasmus com contribuies de outras pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a verso 3. O lanamento do PHP4, ocorrido em 22/05/2000, trouxe muitas novidades aos programadores de PHP. Uma das principais foi o suporte a sesses, bastante til pra identificar o cliente que solicitou determinada informao. Alm das mudanas referentes a sintaxe e novos recursos de programao, o PHP4 trouxe como novidade um otimizador chamado Zend, que permite a execuo muito mais rpida de scripts PHP. A empresa que produz o Zend promete para este ano o lanamento de um compilador de PHP. Cdigos compilados sero executados mais rapidamente, alm de proteger o fonte da aplicao.

02. Enviando Dados para o Servidor HTTP


Programar para a web pode ser considerado como um jogo que consiste em receber os dados do usurio, process-los e enviar a resposta dinmica. Uma vez enviada a resposta, encerrado o contato entre o servidor e o cliente. Portanto a primeira coisa a aprender como fazer para receber os dados enviados pelo browser para o servidor. Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA O protocolo HTTP prov dois principais mtodos para enviar informaes para o servidor web, alm da URL referente ao arquivo solicitado. Esses mtodos so o POST e o GET. O protocolo HTTP/1.0 tambm especifica o mtodo HEAD, utilizado apenas para transmitir informaes do header, alm dos mtodos PUT e DELETE, que no sero abordados neste curso.

O mtodo GET
A especificao do protocolo HTTP/0.9 (a primeira implementao do HTTP) possua a definio do mtodo GET, utilizado pelo browser para solicitar um documento especfico. Por exemplo: a seguinte requisio HTTP retornaria o documento "index.html", localizado no diretrio do servidro chamado teste:

GET /teste/index.html CRLF


Devemos notar que a requisio GET inicia com a palavra GET, inclui o documento solicitado e encerra com a combinao dos caracteres carriage return e line feed. Para um melhor entendimento, voc pode fazer uma requisio GET conectando diretamente em algum servidor WEB, conectando atravs de um programa de telnet (geralmente o servidor http utiliza a porta 80). A resposta ser o cdigo da pgina solicitada.

telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. GET /index.php3 (... pgina solicitada ...) Connection closed by foreign host.
Obviamente a diferena do browser que ele trata as informaes recebidas e exibe a pgina j formatada. Atravs do mtodo GET tambm possvel passar parmetros da requisio ao servidor, que pode tratar esses valores e at alterar a resposta a depender deles, como no exemplo abaixo:

telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. GET /index.php3?id=0024horas&tipo=Taxi (... pgina solicitada ...) Connection closed by foreign host.
No exemplo so passados dois parmetros: id e tipo. Esses parmetros esto no formato conhecido por URLencode, que detalhado no captulo 09. Apesar de ser possvel passar parmetros utilizando o mtodo GET, e com isso gerar pginas dinamicamente, este mtodo tem pelo menos dois problemas que em determinadas circunstncias podem ser considerados srios:

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA O primeiro que o GET permite uma quantidade de dados passados limitada a 1024 caracteres, o que pode gerar perda de informaes em certos casos. O segundo que pelo fato de que as informaes fazem parte da URL, todos os dados podem ser vistos pelo usurio. Isso pode ser extremamente perigoso quando informaes sigilosas esto envolvidas (senha, por exemplo).

Headers
A verso 1.0 do protocolo HTTP trouxe boas inovaes ao mesmo. Uma delas foi a criao de headers nas mensagens de requisio e de resposta. Os headers so informaes trocadas entre o navegador e o servidor de maneira transparente ao usurio, e podem conter dados sobre o tipo e a verso do navegador, a pgina de onde partiu a requisio (link), os tipos de arquivos aceitos como resposta, e uma srie de outras informaes. Assim foi possvel definir um outro mtodo de requisio de arquivos, que resolveu os principais problemas do mtodo GET.

O mtodo POST
Atravs da utilizao de headers possvel enviar os parmetros da URL solicitada sem expor esses dados ao usurio, e tambm sem haver um limite de tamanho. Uma conexo ao servidor HTTP utilizando o mtodo POST seria algo semelhante ao que segue:

telnet www.guia-aju.com.br 80 Trying 200.241.59.16... Connected to www.guia-aju.com.br. Escape character is '^]'. POST /index.php3 Accept */* Content-type: application/x-www-form-urlencoded Content-length:22 id=0024horas&tipo=Taxi (... pgina solicitada ...) Connection closed by foreign host.
Devemos observar os headers enviados ao servidor: a linha Accept informa os tipos de dados que podem ser enviados como resposta (no caso, todos). A linha Content-type informa o tipo de dado que est sendo enviado (urlencoded). O terceiro header o mais importante pois informa o tamanho do corpo da mensagem, que contm os parmetros. Aps todos os headers h um salto de linha e ento iniciado o corpo da mensagem, no formato urlencoded. Obviamente o usurio no deve se preocupar com os headers, em codificar os dados ou em calcular o tamanho do corpo da mensagem. O browser faz isso de maneira transparente.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Utilizando GET e POST


O mtodo GET pode ser utilizado atravs da digitao de um endereo no local apropriado do navegador ou atravs de um hiperlink, ou seja, uma referncia de uma pgina a outra. Nesses casos preciso converter os dados para o formato urlencode. A terceira maneira de utilizar o GET atravs de formulrios HTML, e neste caso o usurio no precisa se preocupar com a codificao dos dados. A utilizao de formulrios HTML a nica maneira possvel de submeter dados pelo mtodo POST.

03. Formulrios HTML


Definindo um formulrio
Por ser uma linguagem de marcao, a sintaxe do HTML na maioria dos casos exige uma tag de incio e uma de final daquele bloco. Exatamente isso que ocorre com a definio de um formulrio: uma tag no incio e outra no final, sendo que todos os elementos do formulrio devem estar entre as duas tags. Isto torna possvel a incluso de mais de um formulrio num mesmo html. As tags citadas so:

<form name= action= method= enctype=>


Onde temos: name: o identificador do formulrio. Utilizado principalmente em Scripts client-side (JavaScript);

action: nome do script que receber os dados do formulrio ao ser submetido. Mais frente esto abordadas
as maneiras de tratar esses dados recebidos;

method: mtodo de envio dos dados: get ou post; enctype: formato em que os dados sero enviados. O default urlencoded. Se for utilizado um elemento do tipo upload de arquivo (file) preciso utilizar o tipo multipart/form-data. Exemplo: <form action="exemplo.php" method="post"> (textos e elementos do form) </form>
Cada elemento do formulrio deve possuir um nome que ir identific-lo no momento em que o script indicado no ACTION for tratar os dados.

A tag <input>
Muitos elementos de um formulrio html so definidos pela tag <input>. Cada tipo de elemento possui parmetros prprios, mas todos possuem pelo menos dois parmetros em comum: type, que define o tipo de elemento, e name, que como j foi dito define o nome daquele elemento.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Campo de Texto
<input type="text" name="" value="" size="" maxlength="">
O campo mais comum em formulrios. Exibe na tela um campo para entrada de texto com apenas uma linha.

Parmetros:
Value o valor pr-definido do elemento, que aparecer quando a pgina for carregada; Size O tamanho do elemento na tela, em caracteres; Maxlength O tamanho mximo do texto contido no elemento, em caracteres;

Campo de Texto com Mscara


<input type="password" name="" value="" size="" maxlength="">
Tipo de campo semelhante ao anterior, com a diferena que neste caso os dados digitados so substitudos por asteriscos, e por isso so os mais recomendados para campos que devam conter senhas. importante salientar que nenhuma criptografia utilizada. Apenas no aparece na tela o que est sendo digitado.

Parmetros:
Value o valor pr-definido do elemento, que aparecer quando a pgina for carregada; Size O tamanho do elemento na tela, em caracteres; Maxlength O tamanho mximo do texto contido no elemento, em caracteres;

Checkbox
<input type="checkbox" name="" value="" checked>
Utilizado para campos de mltipla escolha, onde o usurio pode marcar mais de uma opo.

Parmetros:
Value o valor que ser enviado ao servidor quando o formulrio for submetido, no caso do campo estar marcado Checked O estado inicial do elemento. Quando presente, o elemento j aparece marcado;

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Radio Button
<input type="radio" name="" value="" checked>
Utilizado para campos de mltipla escolha, onde o usurio pode marcar apenas uma opo. Para agrupar vrios elementos deste tipo, fazendo com que eles sejam exclusivos, basta atribuir o mesmo nome a todos do grupo.

Parmetros:
Value o valor que ser enviado ao servidor quando o formulrio for submetido, no caso do campo estar marcado Checked O estado inicial do elemento. Quando presente, o elemento j aparece marcado;

Submit Button
<input type="submit" name="" value="">
Utilizado para enviar os dados do formulrio para o script descrito na seo action da definio do formulrio

Parmetros:
Value o texto que aparecer no corpo do boto.

Reset Button
<input type="reset" name="" value="">
Utilizado para fazer todos os campos do formulrio retornem ao valor original, quando a pgina foi carregada. Bastante utilizado como boto limpar, mas na realidade s limpa os campos se todos eles tm como valor uma string vazia.

Parmetros:
Value o texto que aparecer no corpo do boto.

Button
<input type="button" name="" value="">
Utilizado normalmente para ativar funes de scripts client-side (JavaScript, por exemplo). Sem essa utilizao, no produz efeito algum

Parmetros:
Value o texto que aparecer no corpo do boto. Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

TextArea
<textarea cols="" rows="" name="" wrap="">texto</textarea>
Exibe na tela uma caixa de texto, com o tamanho definido pelos parmetros cols e rows.

Parmetros:
Cols nmero de colunas do campo, em caracteres; Rowsnmero de linhas do campo, em caracteres; Wrap Maneira como so tratadas as quebras de linha automticas. O valor soft faz com que o texto quebre somente na tela, sendo enviado para o servidor o texto da maneira como foi digitado; O valor hard faz com que seja enviado para o servidor da maneira como o texto aparece na tela, com todas as quebras de linhas inseridas automaticamente; o valor off faz com que o texto no quebre na tela e nem quando enviado ao servidor. Value O elemento do tipo textarea no possui o parmetro value. O valor pr-definido do campo o texto que fica entre as tags <textarea> e </textarea>.

Select
<select name="" size="" multiple> <option value="">texto</option> </select>
Se o parmetro size tiver o valor 1 e no houver o parmetro multiple, exibe na tela uma combo box. Caso contrrio, exibe na tela uma select list

Parmetros:
Size nmero de linhas exibidas. Default: 1; Multiple parmetro que, se presente, permite que sejam selecionadas duas ou mais linhas, atravs das teclas Control ou Shift; option Cada item do tipo option acrescenta uma linha ao select; value Valor a ser enviado ao servidor se aquele elemento for selecionado. Default: o texto do item; text valor a ser exibido para aquele item. No definido por um parmetro, mas pelo texto que fica entre as tags <option> e </option>

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Upload de arquivos
<input type="file" name="" size="">
Exibe na tela do browser um campo de texto e um boto, que ao clicado abre uma janela para localizar um arquivo no disco. Para utilizar este tipo de componente, o formulrio dever utilizar o mtodo POST e ter o parmetro enctype com o valor "multipart/form-data".

Parmetros:
Size O tamanho do campo de texto exibido.

04. Instalao e configurao em ambiente windows


Servidor Apache
O servidor http que ser utilizado neste curso o Apache, que est disponvel para download em http://www.apache.org/httpd.html. A instalao do Apache bastante simples, similar a qualquer aplicao windows. A nica restrio que o winsock2 deve estar instalado no sistema. Se no estiver, o download pode ser feito em:
http://www.microsoft.com/windows95/downloads/contents/wuadmintools/s_wunetworkingtools/w95sockets2/

Depois de instalado, necessrio fazer a configurao do servidor, atravs do arquivo httpd.conf. Todas as configuraes esto comentadas. O mnimo que deve ser configurado o diretrio onde os documentos estaro, atravs da opo DocumentRoot. Basta procurar a opo e escrever o nome do diretrio em seguida, como no exemplo:

DocumentRoot "C:\vivas\"
Uma outra configurao bsica a DirectoryIndex, que informa ao servidor quais os arquivos sero exibidos automaticamente como ndice do diretrio. isso que faz com que ao digitar, por exemplo,www.guiaaju.com.br, o servidor saiba qual dos arquivos do diretrio deve ser exibido. Abaixo temos um exemplo da utilizao do DirectoryIndex:

DirectoryIndex index.html index.htm index.php3


Feito isso, crie um arquivo com um dos nomes definidos como ndice e coloque no diretrio definido como root. Execute o servidor Apache e tente acessar o endereo http://localhost pelo browser. Se a pgina for exibida, porque o servidor foi instalado corretamente.

PHP
O PHP pode ser conseguido em www.php.net, e sua instalao tambm simples. Basta descompactar os Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA arquivos para o diretrio c:\php3 e editar o arquivo de configurao. O arquivo php3.ini-dist deve ser copiado para o diretrio do windows (geralmente c:\windows ou c:\winnt) com o nome php3.ini. Depois de copiado, o arquivo pode ser editado, bastando modificar a linha extension_dir, que deve conter o diretrio onde esto os mdulos (c:\php3). Veja o exemplo:

extension_dir

= c:\php3

Alm disso necessrio descomentar a linha referente o mdulo mysql, j que iremos utiliz-lo basta tirar o ; (ponto-e-vrgula) do incio da linha:

;extension=php3_mysql.dll
Feito isso, podemos partir para a configurao do servidor Apache, necessria para que este reconhea o PHP. Editando novamente o arquivo httpd.conf, as linhas a seguir devem ser adicionadas no final do arquivo:

ScriptAlias /php3/ "c:/php3/" AddType application/x-httpd-php3 .php3 .php Action application/x-httpd-php3 "/php3/php.exe"
A primeira linha define o diretrio onde est o PHP. A segunda cria um tipo para o PHP, definido que todos os arquivos com as extenses .php3 e .php devem passar pelo interpretador PHP. A terceira linha define o executvel do interpretador PHP. Depois de salvar o arquivo, podemos testar se a instalao do PHP foi bem sucedida. A melhor maneira criar um arquivo chamado teste.php3 e salvar no diretrio raiz do servidor Apache. O arquivo deve conter a seguinte informao:

<? phpinfo(); ?>


Acessando a pgina atravs do servidor (http://localhost/teste.php3), devemos ter como resultado uma listagem de todas as configuraes do PHP, incluindo o mdulo mysql, que foi definido como ativo no arquivo php3.ini.

mySQL
O banco de dados mySQL pode ser conseguido em http://www.mysql.com/download.html. Sua instalao tambm bastante simples, tambm no modelos de instalao de qualquer aplicativo para Windows. As configuraes necessrias so relativas a segurana, e exigem um conhecimento mais avanado de administrao de servidores. Como essa instalao destina-se apenas a praticar o PHP, no necessrio fazer muitas alteraes na segurana, bastando apenas saber como adicionar usurios. Para isto, basta utilizar o comando GRANT, que tem a seguinte sintaxe:

GRANT privilegio [(lista_colunas)] [, privilegio [(colunas)] ...] ON {tabela | * | *.* | db.*} TO usuario [IDENTIFIED BY senha'] [, usuario [IDENTIFIED BY senha'] ...] [WITH GRANT OPTION]
Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Onde privilgio uma das palavras reservadas listadas a seguir:

ALL PRIVILEGES FILE RELOAD ALTER

INDEX SELECT CREATE INSERT

SHUTDOW N DELETE PROCESS UPDATE ES

DROP REFERENC USAGE

Cada palavra representa um tipo de acesso (s) coluna(s), tabela(s) ou base(s) de dados listadas logo depois da clusula ON. Usurio deve conter o nome do usurio (login) e o host permitido (ex.: teste@localhost). Abaixo temos um exemplo da utilizao do comando grant:

GRANT SELECT, INSERT, UPDATE ON * TO vivas@localhost IDENTIFIED BY senhateste;


O exemplo cria o usurio vivas, com a senha senhateste, que s pode acessar da mesma mquina onde est o servidor (localhost), e s pode utilizar os comandos select, insert e update. Tambm possvel adicionar usurios utilizando o comando INSERT, pra alterar diretamente na tabela de privilgios, que a tabela user da base de dados mysql, que possui os campos para definir nome de usurio, host, senha, e permisses especficas.

05. Instalao e configurao em ambiente linux RedHat


(Disponvel na prxima verso)

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

06. Sintaxe Bsica


Delimitando o cdigo PHP
O cdigo PHP fica embutido no prprio HTML. O interpretador identifica quando um cdigo PHP pelas seguintes tags:

<?php comandos ?> <script language=php> comandos </script> <? comandos ?> <% comandos %>
O tipo de tags mais utilizado o terceiro, que consiste em uma abreviao do primeiro. Para utiliz-lo, necessrio habilitar a opo short-tags na configurao do PHP. O ltimo tipo serve para facilitar o uso por programadores acostumados sintaxe de ASP. Para utiliz-lo tambm necessrio habilit-lo no PHP, atravs do arquivo de configurao php.ini.

Separador de instrues
Entre cada instruo em PHP preciso utilizar o ponto-e-vrgula, assim como em C, Perl e outras linguagens mais conhecidas. Na ltima instruo do bloco de script no necessrio o uso do ponto-e-vrgula, mas por questes estticas recomenda-se o uso sempre.

Nomes de variveis
Toda varivel em PHP tem seu nome composto pelo caracter $ e uma string, que deve iniciar por uma letra ou o caracter _. PHP case sensitive, ou seja, as variveis $vivas e $VIVAS so diferentes. Por isso preciso ter muito cuidado ao definir os nomes das variveis. bom evitar os nomes em maisculas, pois como veremos mais adiante, o PHP j possui alguma variveis pr-definidas cujos nomes so formados por letras maisculas.

Comentrios
Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA H dois tipos de comentrios em cdigo PHP:

Comentrios de uma linha:


Marca como comentrio at o final da linha ou at o final do bloco de cdigo PHP o que vier antes. Pode ser delimitado pelo caracter # ou por duas barras ( // ).

Exemplo: <? echo teste; #isto um teste ?> <? echo teste; //este teste similar ao anterior ?>

Comentrios de mais de uma linha:


Tem como delimitadores os caracteres /* para o incio do bloco e */ para o final do comentrio. Se o delimitador de final de cdigo PHP ( ?> ) estiver dentro de um comentrio, no ser reconhecido pelo interpretador.

Exemplos: <? echo teste; /* Isto um comentrio com mais de uma linha, mas no funciona corretamente ?> */ <? echo teste; /* Isto um comentrio com mais de uma linha que funciona corretamente */ ?>

Imprimindo cdigo html


Um script php geralmente tem como resultado uma pgina html, ou algum outro texto. Para gerar esse resultado, deve ser utilizada uma das funes de impresso, echo e print. Para utiliz-las deve-se utilizar um dos seguintes formatos:

print(argumento); echo (argumento1, argumento2, ... ); echo argumento;

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

07. Tipos
Tipos Suportados
PHP suporta os seguintes tipos de dados:
1. 2. 3. 4. 5. Inteiro Ponto flutuante String Array Objeto

PHP utiliza checagem de tipos dinmica, ou seja, uma varivel pode conter valores de diferentes tipos em diferentes momentos da execuo do script. Por este motivo no necessrio declarar o tipo de uma varivel para us-la. O interpretador PHP decidir qual o tipo daquela varivel, verificando o contedo em tempo de execuo. Ainda assim, permitido converter os valores de um tipo para outro desejado, utilizando o typecasting ou a funo settype (ver adiante).

Inteiros (integer ou long)


Uma varivel pode conter um valor inteiro com atribuies que sigam as seguintes sintaxes:

$vivas = 1234; # inteiro positivo na base decimal $vivas = -234; # inteiro negativo na base decimal $vivas = 0234; # inteiro na base octal-simbolizado pelo 0 # equivale a 156 decimal $vivas = 0x34; # inteiro na base hexadecimal(simbolizado # pelo 0x) equivale a 52 decimal.

A diferena entre inteiros simples e long est no nmero de bytes utilizados para armazenar a varivel. Como a escolha feita pelo interpretador PHP de maneira transparente para o usurio, podemos afirmar que os tipos so iguais.

Nmeros em Ponto Flutuante (double ou float)


Uma varivel pode ter um valor em ponto flutuante com atribuies que sigam as seguintes sintaxes:

$vivas = 1.234; $vivas = 23e4;

# equivale a 230.000

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Strings
Strings podem ser atribudas de duas maneiras: 3. utilizando aspas simples ( ' ) Desta maneira, o valor da varivel ser exatamente o texto contido entre as aspas (com exceo de \\ e \' ver tabela abaixo) 4. utilizando aspas duplas ( " ) Desta maneira, qualquer varivel ou caracter de escape ser expandido antes de ser atribudo. Exemplo:

<? $teste = "Mauricio"; $vivas = '---$teste--\n'; echo "$vivas"; ?>


A sada desse script ser "---$teste--\n".

<? $teste = "Mauricio"; $vivas = "---$teste---\n"; echo "$vivas"; ?>


A sada desse script ser "---Mauricio--" (com uma quebra de linha no final). A tabela seguinte lista os caracteres de escape: Sintaxe

Significado
Nova linha Retorno de carro (semelhante a \n) Tabulao horizontal A prpria barra ( \ ) O smbolo $ Aspa simples Aspa dupla

\n \r \t \\ \$ \ \

No apndice 01 est disponvel uma lista das funes utilizadas no tratamento de strings.

Arrays
Arrays em PHP podem ser observados como mapeamentos ou como vetores indexados. Mais precisamente, um valor do tipo array um dicionrio onde os ndices so as chaves de acesso. Vale ressaltar que os ndices podem ser valores de qualquer tipo e no somente inteiros. Inclusive, se os ndices forem todos inteiros, estes no precisam formar um intervalo contnuo. Como a checagem de tipos em PHP dinmica, valores de tipos diferentes podem ser usados como ndices de array, assim como os valores mapeados tambm podem ser de diversos tipos.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Exemplo: <? $cor[1] = vermelho; $cor[2] = verde; $cor[3] = azul; $cor[teste] = 1; ?> Equivalentemente, pode-se escrever: <? $cor = array(1 => vermelho, 2 => verde, 3 => azul, teste => 1); ?>

Listas
As listas so utilizadas em PHP para realizar atribuies mltiplas. Atravs de listas possvel atribuir valores que esto num array para variveis. Vejamos o exemplo:

Exemplo: list($a, $b, $c) = array(a, b, c);


O comando acima atribui valores s trs variveis simultaneamente. bom notar que s so atribudos s variveis da lista os elementos do array que possuem ndices inteiros e no negativos. No exemplo acima as trs atribuies foram bem sucedidas porque ao inicializar um array sem especificar os ndices eles passam a ser inteiros, a partir do zero. Um fator importante que cada varivel da lista possui um ndice inteiro e ordinal, iniciando com zero, que serve para determinar qual valor ser atribudo. No exemplo anterior temos $a com ndice 0, $b com ndice 1 e $c com ndice 2. Vejamos um outro exemplo:

$arr = array(1=>um,3=>tres,a=>letraA,2=>dois); list($a,$b,$c,$d) = $arr;


Aps a execuo do cdigo acima temos os seguintes valores:

$a == null $b == um $c == dois $d == tres


Devemos observar que varivel $a no foi atribudo valor, pois no array no existe elemento com ndice 0 (zero). Outro detalhe importante que o valor tres foi atribudo varivel $d, e no a $b, pois seu ndice 3, o mesmo que $d na lista. Por fim, vemos que o valor letraA no foi atribudo a elemento algum da lista pois seu ndice no inteiro. Os ndices da lista servem apenas como referncia ao interpretador PHP para realizar as atribuies, no podendo ser acessados de maneira alguma pelo programador. De maneira diferente do array, uma lista no pode ser atribuda a uma varivel, servindo apenas para fazer mltiplas atribuies atravs de um array. No apndice 02 est disponvel uma lista das funes mais comuns para o tratamento de arrays.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Objetos
Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe para uma varivel.

Exemplo: class teste { function nada() { echo nada; } } $vivas = new teste; $vivas -> nada();
A utilizao de objetos ser mais detalhada mais frente.

Booleanos
PHP no possui um tipo booleano, mas capaz de avaliar expresses e retornar true ou false, atravs do tipo integer: usado o valor 0 (zero) para representar o estado false, e qualquer valor diferente de zero (geralmente 1) para representar o estado true.

Transformao de tipos
A transformao de tipos em PHP pode ser feita das seguintes maneiras:

Coeres
Quando ocorrem determinadas operaes (+, por exemplo) entre dois valores de tipos diferentes, o PHP converte o valor de um deles automaticamente (coero). interessante notar que se o operando for uma varivel, seu valor no ser alterado. O tipo para o qual os valores dos operandos sero convertidos determinado da seguinte forma: Se um dos operandos for float, o outro ser convertido para float, seno, se um deles for integer, o outro ser convertido para integer.

Exemplo: $vivas = 1; // $vivas a string 1 $vivas = $vivas + 1; // $vivas o integer 2 $vivas = $vivas + 3.7; // $vivas o double 5.7 $vivas = 1 + 1.5 // $vivas o double 2.5
Como podemos notar, o PHP converte string para integer ou double mantendo o valor. O sistema utilizado pelo PHP para converter de strings para nmeros o seguinte: A. analisado o incio da string. Se contiver um nmero, ele ser avaliado. Seno, o valor ser 0 (zero); Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA B. O nmero pode conter um sinal no incio (+ ou -); C. Se a string contiver um ponto em sua parte numrica a ser analisada, ele ser considerado, e o valor obtido ser double; D. Se a string contiver um e ou E em sua parte numrica a ser analisada, o valor seguinte ser considerado como expoente da base 10, e o valor obtido ser double;

Exemplos: $vivas = 1 $vivas = 1 $vivas = 1 $vivas = 1 $vivas = 1 $vivas = 1

+ + + + + +

10.5; // $vivas == -1.3e3; // $vivas == -1299 teste10.5; // $vivas == 10testes; // $vivas == " 10testes"; // $vivas == "+ 10testes"; // $vivas ==

11.5 1 11 11 1

Transformao explcita de tipos


A sintaxe do typecast de PHP semelhante ao C: basta escrever o tipo entre parenteses antes do valor

Exemplo: $vivas = 15; // $vivas integer (15) $vivas = (double) $vivas // $vivas double (15.0) $vivas = 3.9 // $vivas double (3.9) $vivas = (int) $vivas // $vivas integer (3) // o valor decimal truncado
Os tipos de cast permitidos so: (int), (integer) muda para (real), (double), (float) muda para (string) muda para (array) muda para (object) muda para integer; float; string; array; objeto.

Com a funo settype


A funo settype converte uma varivel para o tipo especificado, que pode ser integer, double, string, array ou object.

Exemplo: $vivas = 15; settype($vivas,double)

// $vivas integer // $vivas double

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

08. Operadores
Aritmticos
S podem ser utilizados quando os operandos so nmeros (integer ou float). Se forem de outro tipo, tero seus valores convertidos antes da realizao da operao. + * / % adio subtrao multiplicao diviso mdulo

de strings
S h um operador exclusivo para strings: . concatenao

de atribuio
Existe um operador bsico de atribuio e diversos derivados. Sempre retornam o valor atribudo. No caso dos operadores derivados de atribuio, a operao feita entre os dois operandos, sendo atribudo o resultado para o primeiro. A atribuio sempre por valor, e no por referncia. = += -= *= /= %= .= atribuio atribuio atribuio atribuio atribuio atribuio atribuio simples com adio com subtrao com multiplicao com diviso com mdulo com concatenao

Exemplo: $a = 7; $a += 2; // $a passa a conter o valor 9

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

bit a bit
Comparam dois nmeros bit a bit. & | ^ ~ << >> e lgico ou lgico ou exclusivo no (inverso) shift left shift right

Lgicos
Utilizados para inteiros representando valores booleanos and or xor ! && || e lgico ou lgico ou exclusivo no (inverso) e lgico ou lgico

Existem dois operadores para e e para ou porque eles tm diferentes posies na ordem de precedncia.

Comparao
As comparaes so feitas entre os valores contidos nas variveis, e no as referncias. Sempre retornam um valor booleano. == != < > <= >= igual a diferente de menor que maior que menor ou igual a maior ou igual a

Expresso condicional
Existe um operador de seleo que ternrio. Funciona assim:

(expressao1)?(expressao2):( expressao3)

o interpretador PHP avalia a primeira expresso. Se ela for verdadeira, a expresso retorna o valor de expresso2. Seno, retorna o valor de expresso3.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

de incremento e decremento
++ -incremento decremento

Podem ser utilizados de duas formas: antes ou depois da varivel. Quando utilizado antes, retorna o valor da varivel antes de increment-la ou decrement-la. Quando utilizado depois, retorna o valor da varivel j incrementado ou decrementado.

Exemplos: $a = $b = 10; // $a e $b recebem o valor 10 $c = $a++; // $c recebe 10 e $a passa a ter 11 $d = ++$b; // $d recebe 11, valor de $b j incrementado

09. Estruturas de Controle


As estruturas que veremos a seguir so comuns para as linguagens de programao imperativas, bastando, portanto, descrever a sintaxe de cada uma delas, resumindo o funcionamento.

Blocos
Um bloco consiste de vrios comandos agrupados com o objetivo de relacion-los com determinado comando ou funo. Em comandos como if, for, while, switch e em declaraes de funes blocos podem ser utilizados para permitir que um comando faa parte do contexto desejado. Blocos em PHP so delimitados pelos caracteres { e }. A utilizao dos delimitadores de bloco em uma parte qualquer do cdigo no relacionada com os comandos citados ou funes no produzir efeito algum, e ser tratada normalmente pelo interpretador.

Exemplo: if ($x == $y) comando1; comando2;


Para que comando2 esteja relacionado ao if preciso utilizar um bloco:

if ($x == $y){ comando1; comando2; }

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Comandos de seleo
Tambm chamados de condicionais, os comandos de seleo permitem executar comandos ou blocos de comandos com base em testes feitos durante a execuo.

if
O mais trivial dos comandos condicionais o if. Ele testa a condio e executa o comando indicado se o resultado for true (valor diferente de zero). Ele possui duas sintaxes:

if (expresso) comando; if (expresso): comando; ... comando; endif;


Para incluir mais de um comando no if da primeira sintaxe, preciso utilizar um bloco, demarcado por chaves. O else um complemento opcional para o if. Se utilizado, o comando ser executado se a expresso retornar o valor false (zero). Suas duas sintaxes so:

if (expresso) comando; else comando; if (expresso): comando; ... comando; else comando; ... comando; endif;

A seguir, temos um exemplo do comando if utilizado com else:

if ($a > $b) $maior = $a; else


Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

$maior = $b;
O exemplo acima coloca em $maior o maior valor entre $a e $b Em determinadas situaes necessrio fazer mais de um teste, e executar condicionalmente diversos comandos ou blocos de comandos. Para facilitar o entendimento de uma estrutura do tipo:

if (expressao1) comando1; else if (expressao2) comando2; else if (expressao3) comando3; else comando4;
foi criado o comando, tambm opcional elseif. Ele tem a mesma funo de um else e um if usados sequencialmente, como no exemplo acima. Num mesmo if podem ser utilizados diversos elseif s, ficando essa utilizao a critrio do programador, que deve zelar pela legibilidade de seu script. O comando elseif tambm pode ser utilizado com dois tipos de sintaxe. Em resumo, a sintaxe geral do comando if fica das seguintes maneiras:

if (expressao1) comando; [ elseif (expressao2) comando; ] [ else comando; ]

if (expressao1) : comando; ... comando; [ elseif (expressao2) comando; ... comando; ] [ else comando; ... comando; ] endif;

switch

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA O comando switch atua de maneira semelhante a uma srie de comandos if na mesma expresso. Frequentemente o programador pode querer comparar uma varivel com diversos valores, e executar um cdigo diferente a depender de qual valor igual ao da varivel. Quando isso for necessrio, deve-se usar o comando switch. O exemplo seguinte mostra dois trechos de cdigo que fazem a mesma coisa, sendo que o primeiro utiliza uma srie de if s e o segundo utiliza switch:

if ($i == 0) print i igual a zero; elseif ($i == 1) print i igual a um; elseif ($i == 2) print i igual a dois; switch ($i) { case 0: print i igual a zero; break; case 1: print i igual a um; break; case 2: print i igual a dois; break; }
importante compreender o funcionamento do switch para no cometer enganos. O comando switch testa linha a linha os cases encontrados, e a partir do momento que encontra um valor igual ao da varivel testada, passa a executar todos os comandos seguintes, mesmo os que fazem parte de outro teste, at o fim do bloco. por isso usa-se o comando break, quebrando o fluxo e fazendo com que o cdigo seja executado da maneira desejada. Veremos mais sobre o break mais adiante. Veja o exemplo:

switch ($i) { case 0: print i igual a zero; case 1: print i igual a um; case 2: print i igual a dois;
} No exemplo acima, se $i for igual a zero, os trs comandos print sero executados. Se $i for igual a 1, os dois ltimos print sero executados. O comando s funcionar da maneira desejada se $i for igual a 2. Em outras linguagens que implementam o comando switch, ou similar, os valores a serem testados s podem ser do tipo inteiro. Em PHP permitido usar valores do tipo string como elementos de teste do comando switch. O exemplo abaixo funciona perfeitamente:

switch ($s) { case casa:


Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

print A casa amarela; case arvore: print a rvore bonita; case lampada: print joao apagou a lampada;
}

comandos de repetio
while
O while o comando de repetio (lao) mais simples. Ele testa uma condio e executa um comando, ou um bloco de comandos, at que a condio testada seja falsa. Assim como o if, o while tambm possui duas sintaxes alternativas:

while (<expressao>) <comando>; while (<expressao>): <comando>; ... <comando>; endwhile;


A expresso s testada a cada vez que o bloco de instrues termina, alm do teste inicial. Se o valor da expresso passar a ser false no meio do bloco de instrues, a execuo segue at o final do bloco. Se no teste inicial a condio for avaliada como false, o bloco de comandos no ser executado. O exemplo a seguir mostra o uso do while para imprimir os nmeros de 1 a 10:

$i = 1; while ($i <=10) print $i++;

do... while
O lao do..while funciona de maneira bastante semelhante ao while, com a simples diferena que a expresso testada ao final do bloco de comandos. O lao do..while possui apenas uma sintaxe, que a seguinte:

do { <comando> ... <comando> } while (<expressao>);


O exemplo utilizado para ilustrar o uso do while pode ser feito da seguinte maneira utilizando o do.. while:

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

$i = 0; do { print ++$i; } while ($i < 10);

for
O tipo de lao mais complexo o for. Para os que programam em C, C++ ou Java, a assimilao do funcionamento do for natural. Mas para aqueles que esto acostumados a linguagens como Pascal, h uma grande mudana para o uso do for. As duas sintaxes permitidas so:

for (<inicializacao>;<condicao>;<incremento>) <comando>; for (<inicializacao>;<condicao>;<incremento>) : <comando>; ... <comando>; endfor;


As trs expresses que ficam entre parnteses tm as seguintes finalidades: Inicializao: comando ou sequencia de comandos a serem realizados antes do inicio do lao. Serve para inicializar variveis. Condio: Expresso booleana que define se os comandos que esto dentro do lao sero executados ou no. Enquanto a expresso for verdadeira (valor diferente de zero) os comandos sero executados. Incremento: Comando executado ao final de cada execuo do lao. Um comando for funciona de maneira semelhante a um while escrito da seguinte forma:

<inicializacao> while (<condicao>) { comandos ... <incremento> }

Quebra de fluxo
Break
O comando break pode ser utilizado em laos de do, for e while, alm do uso j visto no comando switch. Ao encontrar um break dentro de um desses laos, o interpretador PHP para imediatamente a execuo do lao, seguindo normalmente o fluxo do script. Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

while ($x > 0) { ... if ($x == 20) { echo erro! x = 20; break; ... }
No trecho de cdigo acima, o lao while tem uma condio para seu trmino normal ($x <= 0), mas foi utilizado o break para o caso de um trmino no previsto no incio do lao. Assim o interpretador seguir para o comando seguinte ao lao.

Continue
O comando continue tambm deve ser utilizado no interior de laos, e funciona de maneira semelhante ao break, com a diferena que o fluxo ao invs de sair do lao volta para o incio dele. Vejamos o exemplo:

for ($i = 0; $i < 100; $i++) { if ($i % 2) continue; echo $i ; }


O exemplo acima uma maneira ineficiente de imprimir os nmeros pares entre 0 e 99. O que o lao faz testar se o resto da diviso entre o nmero e 2 0. Se for diferente de zero (valor lgico true) o interpretador encontrar um continue, que faz com que os comandos seguintes do interior do lao sejam ignorados, seguindo para a prxima iterao.

10. Funes
Definindo funes
A sintaxe bsica para definir uma funo :

function nome_da_funo([arg1, arg2, arg3]) { Comandos; ... ; [return <valor de retorno>]; }


Qualquer cdigo PHP vlido pode estar contido no interior de uma funo. Como a checagem de tipos em PHP dinmica, o tipo de retorno no deve ser declarado, sendo necessrio que o programador esteja atento para que a funo retorne o tipo desejado. recomendvel que esteja tudo bem documentado para facilitar a leitura e compreenso do cdigo. Para efeito de documentao, utiliza-se o seguinte formato de declarao de funo:

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

tipo function nome_da_funcao(tipo arg1, tipo arg2, ...);


Este formato s deve ser utilizado na documentao do script, pois o PHP no aceita a declarao de tipos. Isso significa que em muitos casos o programador deve estar atento ao tipos dos valores passados como parmetros, pois se no for passado o tipo esperado no emitido nenhum alerta pelo interpretador PHP, j que este no testa os tipos.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Valor de retorno
Toda funo pode opcionalmente retornar um valor, ou simplesmente executar os comandos e no retornar valor algum. No possvel que uma funo retorne mais de um valor, mas permitido fazer com que uma funo retorne um valor composto, como listas ou arrays.

Argumentos
possvel passar argumentos para uma funo. Eles devem ser declarados logo aps o nome da funo, entre parnteses, e tornam-se variveis pertencentes ao escopo local da funo. A declarao do tipo de cada argumento tambm utilizada apenas para efeito de documentao.

Exemplo: function imprime($texto){ echo $texto; } imprime(teste de funes);

Passagem de parmetros por referncia


Normalmente, a passagem de parmetros em PHP feita por valor, ou seja, se o contedo da varivel for alterado, essa alterao no afeta a varivel original.

Exemplo: function mais5($numero) { $numero += 5; } $a = 3; mais5($a); //$a continua valendo 3


No exemplo acima, como a passagem de parmetros por valor, a funo mais5 intil, j que aps a execuo sair da funo o valor anterior da varivel recuperado. Se a passagem de valor fosse feita por referncia, a varivel $a teria 8 como valor. O que ocorre normalmente que ao ser chamada uma funo, o interpretador salva todo o escopo atual, ou seja, os contedos das variveis. Se uma dessas variveis for passada como parmetro, seu contedo fica preservado, pois a funo ir trabalhar na verdade com uma cpia da varivel. Porm, se a passagem de parmetros for feita por referncia, toda alterao que a funo realizar no valor passado como parmetro afetar a varivel que o contm. H duas maneiras de fazer com que uma funo tenha parmetros passados por referncia: indicando isso na declarao da funo, o que faz com que a pasagem de parmetros sempre seja assim; e tambm na prpria chamada da funo. Nos dois casos utiliza-se o modificador &. Vejamos um exemplo que ilustra os dois casos:

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

function mais5(&$num1, $num2) { $num1 += 5; $num2 += 5; } $a = $b = 1; mais5($a, $b); /* Neste caso, s $num1 ter seu valor alterado, pois a passagem por referncia est definida na declarao da funo. */ mais5($a, &$b); /* Aqui as duas variveis tero seus valores alterados. */

Argumentos com valores pr-definidos (default)


Em PHP possvel ter valores default para argumentos de funes, ou seja, valores que sero assumidos em caso de nada ser passado no lugar do argumento. Quando algum parmetro declarado desta maneira, a passagem do mesmo na chamada da funo torna-se opcional.

function teste($vivas = testando) { echo $vivas; } teste(); // imprime testando teste(outro teste); // imprime outro teste
bom lembrar que quando a funo tem mais de um parmetro, o que tem valor default deve ser declarado por ltimo:

function teste($figura = circulo, $cor) { echo a figura um , $figura, de cor $cor; } teste(azul); /* A funo no vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A declarao correta : */ function teste2($cor, $figura = circulo) { echo a figura um , $figura, de cor $cor; } teste2(azul); /* Aqui a funcao funciona da maneira esperada, ou seja, imprime o texto: a figura um crculo de cor azul */

Contexto
O contexto o conjunto de variveis e seus respectivos valores num determinado ponto do programa. Na chamada de uma funo, ao iniciar a execuo do bloco que contm a implementao da mesma criado um novo contexto, contendo as variveis declaradas dentro do bloco, ou seja, todas as variveis utilizadas dentro Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA daquele bloco sero eliminadas ao trmino da execuo da funo.

Escopo
O escopo de uma varivel em PHP define a poro do programa onde ela pode ser utilizada. Na maioria dos casos todas as variveis tm escopo global. Entretanto, em funes definidas pelo usurio um escopo local criado. Uma varivel de escopo global no pode ser utilizada no interior de uma funo sem que haja uma declarao.

Exemplo: $vivas = Testando; function Teste() { echo $vivas; } Teste();


O trecho acima no produzir sada alguma, pois a varivel $vivas de escopo global, e no pode ser referida num escopo local, mesmo que no haja outra com nome igual que cubra a sua visibilidade. Para que o script funcione da forma desejada, a varivel global a ser utilizada deve ser declarada.

Exemplo: $vivas = Testando; function Teste() { global $vivas; echo $vivas; } Teste();
Uma declarao global pode conter vrias variveis, separadas por vrgulas. Uma outra maneira de acessar variveis de escopo global dentro de uma funo utilizando um array pr-definido pelo PHP cujo nome $GLOBALS. O ndice para a varivel referida o proprio nome da varivel, sem o caracter $. O exemplo acima e o abaixo produzem o mesmo resultado:

Exemplo: $vivas = "Testando"; function Teste() { echo $GLOBALS["vivas"]; // imprime $vivas echo $vivas; // no imprime nada } Teste();

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

11. Variveis e Constantes


Declarao de uma varivel
Como a tipagem em PHP dinmica, as variveis no precisam ser declaradas. Uma varivel inicializada no momento em que feita a primeira atribuio. O tipo da varivel ser definido de acordo com o valor atribudo.

O modificador static
Uma varivel esttica visvel num escopo local, mas ela inicializada apenas uma vez e seu valor no perdido quando a execuo do script deixa esse escopo. Veja o seguinte exemplo:

function Teste() { $a = 0; echo $a; $a++; }


O ltimo comando da funo intil, pois assim que for encerrada a execuo da funo a varivel $a perde seu valor. J no exemplo seguinte, a cada chamada da funo a varivel $a ter seu valor impresso e ser incrementada:

function Teste() { static $a = 0; echo $a; $a++; }


O modificador static muito utilizado em funes recursivas, j que o valor de algumas variveis precisa ser mantido. Ele funciona da seguinte forma: O valor das variveis declaradas como estticas mantido ao terminar a execuo da funo. Na prxima execuo da funo, ao encontrar novamente a declarao com static, o valor da varivel recuperado. Em outras palavras, uma varivel declarada como static tem o mesmo tempo de vida que uma varivel global, porm sua visibilidade restrita ao escopo local em que foi declarada e s recuperada aps a declarao. Exemplo:

function Teste() { echo "$a"; static $a = 0; $a++; }


O exemplo acima no produzir sada alguma. Na primeira execuo da funo, a impresso ocorre antes da atribuio de um valor funo, e portanto o contedo de $a nulo (string vazia). Nas execues seguintes Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA da funo Teste() a impresso ocorre antes da recuperao do valor de $a, e portanto nesse momento seu valor ainda nulo. Para que a funo retorne algum valor o modificador static deve ser utilizado.

Variveis Variveis
O PHP tem um recurso conhecido como variveis variveis, que consiste em variveis cujos nomes tambm so variveis. Sua utilizao feita atravs do duplo cifro ($$).

$a = teste; $$a = Mauricio Vivas; O exemplo acima e equivalente ao seguinte: $a = teste; $teste = Mauricio Vivas;

Variveis enviadas pelo navegador


Para interagir com a navegao feita pelo usurio, necessrio que o PHP possa enviar e receber informaes para o software de navegao. A maneira de enviar informaes, como j foi visto anteriormente, geralmente atravs de um comando de impresso, como o echo. Para receber informaes vindas do navegador atravs de um link ou um formulrio html o PHP utiliza as informaes enviadas atravs da URL. Por exemplo: se seu script php est localizado em http://localhost/teste.php3 e voc o chama com a url http://localhost/teste.php3?vivas=teste, automaticamente o PHP criar uma varivel com o nome $vivas contendo a string teste. Note que o contedo da varivel est no formato urlencode. Os formulrios html j enviam informaes automaticamente nesse formato, e o PHP decodifica sem necessitar de tratamento pelo programador.

URLencode
O formato urlencode obtido substituindo os espaos pelo caracter + e todos os outros caracteres no alfanumricos (com exceo de _) pelo caracter % seguido do cdigo ASCII em hexadecimal. Por exemplo: o texto Testando 1 2 3 !! em urlencode fica Testando+1+2+3+%21%21 O PHP possui duas funes para tratar com texto em urlencode. Seguem suas sintaxes:

string urlencode(string texto); string urldecode(string texto); Essas funes servem respectivamente para codificar ou decodificar um texto passado como argumento. Para entender melhor o que um argumento e como funciona uma funo, leia o tpico funes.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Utilizando arrays
Cada elemento de um formulrio HTML submetido a um script PHP cria no ambiente do mesmo uma varivel cujo nome o mesmo nome do elemento. Por exemplo: um campo definido como:

<input type=text name=endereco>


ao ser submetido a um script PHP far com que seja criada uma varivel com o nome $endereco. Isto acontece de forma semelhante para cookies, como veremos mais adiante. Uma boa tcnica de programao utilizar a notao de arrays para nomes de cookies ou itens de um formulrio html. Para um conjunto de checkboxes, por exemplo, podemos utilizar a seguinte notao:

<input <input <input <input <input

type="checkbox" type="checkbox" type="checkbox" type="checkbox" type="checkbox"

name="teste[]" name="teste[]" name="teste[]" name="teste[]" name="teste[]"

value="valor1">opcao1 value="valor2">opcao2 value="valor3">opcao3 value="valor4">opcao4 value="valor5">opcao5

Ao submeter o formulrio, o script que recebe os valores submetidos ter uma varivel chamada $teste contendo os valores marcados num array, com ndices a partir de zero. Assim, se forem marcadas as opoes 2, 3 e 5, poderemos fazer as seguintes afirmaes:

$teste == array(valor2, valor3, valor5); $teste[0] == valor2; $teste[1] == valor3; $teste[2] == valor5;
O mesmo artifcio pode ser utilizado com outros elementos de formulrios e at com cookies.

Variveis de ambiente
O PHP possui diversas variveis de ambiente, como a $PHP_SELF, por exemplo, que contm o nome e o path do prprio arquivo. Algumas outras contm informaes sobre o navegador do usurio, o servidor http, a verso do PHP e diversas informaes. Para ter uma listagem de todas as variveis e constantes de ambiente e seus respectivos contedos, deve-se utilizar a funo phpinfo().

Verificando o tipo de uma varivel


Por causa da tipagem dinmica utilizada pelo PHP, nem sempre possvel saber qual o tipo de uma varivel em determinado instantese no contar com a ajuda de algumas funes que ajudam a verificar isso. A verificao pode ser feita de duas maneiras:

Funo que retorna o tipo da varivel


Esta funo a gettype. Sua assinatura a seguinte:

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

string gettype(mixed var);


A palavra mixed indica que a varivel var pode ser de diversos tipos. A funo gettype pode retornar as seguintes strings: integer, double, string, array, object e

unknown type.

Funes que testam o tipo da varivel


So as funes is_int, is_integer, is_real, is_long, is_float, is_string, is_array e is_object . Todas tm o mesmo formato, seguindo modelo da assinatura a seguir:

int is_integer(mixed var);


Todas essas funes retornam true se a varivel for daquele tipo, e false em caso contrrio.

Destruindo uma varivel


possvel desalocar uma varivel se ela no for usada posteriormente atravs da funo unset, que tem a seguinte assinatura:

int unset(mixed var);


A funo destri a varivel, ou seja, libera a memria ocupada por ela, fazendo com que ela deixe de existir. Se mais na frente for feita uma chamada varivel, ser criada uma nova varivel de mesmo nome e de contedo vazio, a no ser que a chamada seja pela funo isset. Se a operao for bem sucedida, retorna true.

Verificando se uma varivel possui um valor


Existem dois tipos de teste que podem ser feitos para verificar se uma varivel est setada: com a funo isset e com a funo empty.

A funo isset
Possui o seguinte prottipo:

int isset(mixed var);


E retorna true se a varivel estiver setada (ainda que com uma string vazia ou o valor zero), e false em caso contrrio.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

A funo empty
Possui a seguinte assinatura:

int empty(mixed var);


E retorna true se a varivel no contiver um valor (no estiver setada) ou possuir valor 0 (zero) ou uma string vazia. Caso contrrio, retorna false.

Constantes pr-definidas
O PHP possui algumas constantes pr-definidas, indicando a verso do PHP, o Sistema Operacional do servidor, o arquivo em execuo, e diversas outras informaes. Para ter acesso a todas as constantes pr-definidas, pode-se utilizar a funo phpinfo(), que exibe uma tabela contendo todas as constantes pr-definidas, assim como configuraes da mquina, sistema operacional, servidor http e verso do PHP instalada.

Definindo constantes
Para definir constantes utiliza-se a funo define. Uma vez definido, o valor de uma constante no poder mais ser alterado. Uma constante s pode conter valores escalares, ou seja, no pode conter nem um array nem um objeto. A assinatura da funo define a seguinte:

int define(string nome_da_constante, mixed valor);


A funo retorna true se for bem-sucedida. Veja um exemplo de sua utilizao a seguir:

define ("pi", 3.1415926536); $circunf = 2*pi*$raio;

12. Classes e Objetos


Classe
Uma classe um conjunto de variveis e funes relacionadas a essas variveis. Uma vantagem da utilizao de programao orientada a objetos poder usufruir do recurso de encapsulamento de informao. Com o encapsulamento o usurio de uma classe no precisa saber como ela implementada, bastando para a utilizao conhecer a interface, ou seja, as funes disponveis. Uma classe um tipo, e portanto no pode ser atribuda a uma varivel. Para definir uma classe, deve-se utilizar a seguinte sintaxe:

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

class Nome_da_classe { var $variavel1; var $variavel2; function funcao1 ($parametro) { /* === corpo da funo === */ } }

Objeto
Como foi dito anteriormente, classes so tipos, e no podem ser atribudas a variveis. Variveis do tipo de uma classe so chamadas de objetos, e devem ser criadas utilizando o operador new, seguindo o exemplo abaixo:

$variavel = new $nome_da_classe;


Para utilizar as funes definidas na classe, deve ser utilizado o operador ->, como no exemplo:

$variavel->funcao1(

A varivel $this
Na definio de uma classe, pode-se utilizar a varivel $this, que o prprio objeto. Assim, quando uma classe instanciada em um objeto, e uma funo desse objeto na definio da classe utiliza a varivel $this, essa varivel significa o objeto que estamos utilizando. Como exemplo da utilizao de classes e objetos, podemos utilizar a classe conta, que define uma conta bancria bastante simples, com funes para ver saldo e fazer um crdito.

class conta { var $saldo; function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; } } $minhaconta = new conta; $minhaconta->saldo(); // a variavel interna no foi // inicializada, e no contm // valor algum

$minhaconta->credito(50); $minhaconta->saldo(); // retorna 50

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

SubClasses
Uma classe pode ser uma extenso de outra. Isso significa que ela herdar todas as variveis e funes da outra classe, e ainda ter as que forem adicionadas pelo programador. Em PHP no permitido utilizar herana mltipla, ou seja, uma classe pode ser extenso de apenas uma outra.Para criar uma classe extendida, ou derivada de outra, deve ser utilizada a palavra reservada extends, como pode ser visto no exemplo seguinte:

class novaconta extends conta { var $num; function numero() { return $this->num; } }
A classe acima derivada da classe conta, tendo as mesmas funes e variveis, com a adio da varivel $numero e a funo numero().

Construtores
Um construtor uma funo definida na classe que automaticamente chamada no momento em que a classe instanciada (atravs do operador new). O construtor deve ter o mesmo nome que a classe a que pertence. Veja o exemplo:

class conta { var $saldo; function conta () { $this.saldo = 0; } function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; } }
Podemos perceber que a classe conta agora possui um construtor, que inicializa a varivel $saldo com o valor 0. Um construtor pode conter argumentos, que so opcionais, o que torna esta ferramenta mais poderosa. No exemplo acima, o construtor da classe conta pode receber como argumento um valor, que seria o valor inicial da conta. Vale observar que para classes derivadas, o construtor da classe pai no automaticamente herdado quando o construtor da classe derivada chamado. Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

13. Noes de SQL


Introduo
Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas sua manipulao. O Departamento de Pesquisas da IBM, desenvolveu a SQL como forma de interface para o sistema de BD relacional denominado SYSTEM R, incio dos anos 70. Em 1986 o American National Standard Institute ( ANSI ), publicou um padro SQL. A SQL estabeleceu-se como linguagem padro de Banco de Dados Relacional. SQL apresenta uma srie de comandos que permitem a definio dos dados, chamada de DDL (Data Definition Language), composta entre outros pelos comandos Create, que destinado a criao do Banco de Dados, das Tabelas que o compe, alm das relaes existentes entre as tabelas. Como exemplo de comandos da classe DDL temos os comandos Create, Alter e Drop. Os comandos da srie DML (Data Manipulation Language), destinados a consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea. Como exemplo de comandos da classe DML temos os comandos Select, Insert, Update e Delete. Uma subclasse de comandos DML, a DCL (Data Control Language), dispe de comandos de controle como Grant e Revoke. A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar ndices, sem a necessidade de controle individualizado de ndice corrente, algo muito comum nas linguagens de manipulao de dados do tipo registro a registro. Outra caracterstica muito importante disponvel em SQL sua capacidade de construo de vises, que so formas de visualizarmos os dados na forma de listagens independente das tabelas e organizao lgica dos dados. Outra caracterstica interessante na linguagem SQL a capacidade que dispomos de cancelar uma srie de atualizaes ou de as gravarmos, depois de iniciarmos uma seqncia de atualizaes. Os comandos Commit e Rollback so responsveis por estas facilidades. Devemos notar que a linguagem SQL consegue implementar estas solues, somente pelo fato de estar baseada em Banco de Dados, que garantem por si mesmo a integridade das relaes existentes entre as tabelas e seus ndices.

Estrutura das tabelas


Comando Create
Este comando permite a criao de tabelas no banco de dados ou mesmo de sua criao. Sintaxe:

CREATE DATABASE < nome_db >;


onde: nome_db - indica o nome do Banco de Dados a ser criado. Sintaxe:

CREATE TABLE < nome_tabela > ( nome_atributo1 < tipo > [ NOT NULL ],
Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

nome_atributo2 < tipo > [ NOT NULL ], ...... nome_atributoN < tipo > [ NOT NULL ] );
onde: nome_table - indica o nome da tabela a ser criada. nome_atributo - indica o nome do campo a ser criado na tabela. tipo - indica a definio do tipo de atributo ( integer(n), char(n), ... ).

Comando Drop
Este comando elimina a definio da tabela, seus dados e referncias. Sintaxe:

DROP TABLE < nome_tabela > ;

Comando Alter
Este comando permite inserir/eliminar atributos nas tabelas j existentes. Comando:

ALTER TABLE < nome_tabela > ADD / DROP ( nome_atributo1 < tipo > [ NOT NULL ], nome_atributoN < tipo > [ NOT NULL ] );

Manipulando dados das tabelas


Comando SELECT
Permite recuperar informaes existentes nas tabelas. Sintaxe bsica:

SELECT [DISTINCT] expressao [AS nom-atributo] [FROM from-list] [WHERE condicao] [ORDER BY attr_name1 [ASC | DESC ]]
onde: DISTINCT : Para eliminar linhas duplicadas na sada. Expressao: Define os dados que queremos na sada, normalmente uma ou mais colunas de uma tabela da lista FROM. AS nom-atributo : um alias para o nome da coluna, exemplo: FROM : lista das tabelas na entrada WHERE : critrios da seleo ORDER BY : Critrio de ordenao das tabelas de sada. ASC ordem ascendente, DESC ordem descendente

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Exemplo:

SELECT cidade, estado from brasil where populacao > 100000;

Comando INSERT
Adiciona um ou vrios registros a uma tabela. Isto referido como consulta anexao. Sintaxe bsica

INSERT INTO destino [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...])
A instruo INSERT INTO tem as partes abaixo: Destino- O nome da tabela ou consulta em que os registros devem ser anexados. campo1, campo2 - Os nomes dos campos aos quais os dados devem ser anexados valor1, valor2 - Os valores para inserir em campos especficos do novo registro. Cada valor inserido no campo que corresponde posio do valor na lista: Valor1 inserido no campo1 do novo registro, valor2 no campo2 e assim por diante. Voc deve separar os valores com uma vrgula e colocar os campos de textos entre aspas (" ").

Comando UPDATE
Cria uma consulta atualizao que altera os valores dos campos em uma tabela especificada com base em critrios especficos. Sintaxe:

UPDATE tabela SET campo1 = valornovo, ... WHERE critrio;


Onde: Tabela - O nome da tabela cujos os dados voc quer modificar. Valornovo - Uma expresso que determina o valor a ser inserido em um campo especfico nos registros atualizados. critrio - Uma expresso que determina quais registros devem ser atualizados. S os registros que satisfazem a expresso so atualizados. UPDATE especialmente til quando voc quer alterar muitos registros ou quando os registros que voc quer alterar esto em vrias tabelas. Voc pode alterar vrios campos ao mesmo tempo. UPDATE no gera um conjunto de resultados. Se voc quiser saber quais resultados sero alterados, examine primeiro os resultados da consulta seleo que use os mesmos critrios e ento execute a consulta atualizao.

Comando DELETE
Remove registros de uma ou mais tabelas listadas na clusula FROM que satisfaz a clusula WHERE. Sintaxe

DELETE [tabela.*] FROM tabela


Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

WHERE critrio
onde: tabela.* - O nome opcional da tabela da qual os registros so excludos. tabela - O nome da tabela da qual os registros so excludos. critrio - Uma expresso que determina qual registro deve ser excludo. DELETE especialmente til quando voc quer excluir muitos registros. Para eliminar uma tabela inteira do banco de dados, voc pode usar o mtodo Execute com uma instruo DROP. Entretanto, se voc eliminar a tabela, a estrutura perdida. Por outro lado, quando voc usa DELETE, apenas os dados so excludos. A estrutura da tabela e todas as propriedades da tabela, como atributos de campo e ndices, permanecem intactos. Voc pode usar DELETE para remover registros de tabelas que esto em uma relao um por vrios com outras tabelas. Operaes de excluso em cascata fazem com que os registros das tabelas que esto no lado "vrios" da relao sejam excludos quando os registros correspondentes do lado "um" da relao so excludos na consulta. Por exemplo, nas relaes entre as tabelas Clientes e Pedidos, a tabela Clientes est do lado "um" e a tabela Pedidos est no lado "vrios" da relao. Excluir um registro em Clientes faz com que os registros correspondentes em Pedidos sejam excludos se a opo de excluso em cascata for especificada. O DELETE exclui registros inteiros e no apenas dados em campos especficos. Se voc quiser excluir valores de um campo especfico, crie uma consulta atualizao que mude os valores para Null. Aps remover os registros usando uma consulta excluso, voc no poder desfazer a operao. Se quiser saber quais arquivos foram excludos, primeiro examine os resultados de uma consulta seleo que use o mesmo critrio e ento, execute a consulta excluso. Mantenha os backups de seus dados. Se voc excluir os registros errados, poder recuper-los a partir dos seus backups.

14. Acessando o mySQL via PHP


Estabelecendo conexes
Para acessar bases de dados num servidor mySQL, necessrio antes estabelecer uma conexo. Para isso, deve ser utilizado o comando mysql_connect, ou o mysql_pconnect. A diferena entre os dois comandos que o mysql_pconnect estabelece uma conexo permanente, ou seja, que no encerrada ao final da execuo do script. As assinaturas dos dois comandos so semelhantes, como pode ser verificado a seguir:
int mysql_connect(string [host[:porta]] , string [login] , string [senha] ); int mysql_pconnect(string [host[:porta]] , string [login] , string [senha] );

O valor de retorno um inteiro que identifica a conexo, ou falso se a conexo falhar. Antes de tentar estabelecer uma conexo, o interpretador PHP verifica se j existe uma conexo estabelecida com o mesmo host, o mesmo login e a mesma senha. Se existir, o identificador desta conexo retornado. Seno, uma nova conexo criada. Uma conexo estabelecida com o comando mysql_connect encerrada ao final da execuo do script. Para Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA encerr-la antes disso deve ser utilizado o comando mysql_close, que tem a seguinte assinatura:

int mysql_close(int [identificador da conexo] );


Se o identificador no for fornecido, a ltima conexo estabelecida ser encerrada. IMPORTANTE: o comando mysql_close no encerra conexes estabelecidas mysql_pconnect. com o comando

Selecionando a base de dados


Depois de estabelecida a conexo, preciso selecionar a base de dados a ser utilizada, atravs do comando mysql_select_db, que segue o seguinte modelo:

int mysql_select_db(string base, int [conexao] );


Novamente, se o identificador da conexo no for fornecido, a ltima conexo estabelecida ser utilizada.

Realizando consultas
Para executar consultas SQL no mySQL, utiliza-se o comando mysql_query, que tem a seguinte assinatura:

int mysql_query(string query, int [conexao] );


Onde query a expresso SQL a ser executada, sem o ponto-e-vrgula no final, e conexao o identificador da conexo a ser utilizada. A consulta ser executada na base de dados selecionada pelo comando mysql_select_db. bom lembrar que uma consulta no significa apenas um comando SELECT. A consulta pode conter qualquer comando SQL aceito pelo banco. O valor de retorno falso se a expresso SQL for incorreta, e diferente de zero se for correta. No caso de uma expresso SELECT, as linhas retornadas so armazenadas numa memria de resultados, e o valor de retorno o identificador do resultado. Alguns comandos podem ser realizados com esse resultado:

Apagando o resultado
int mysql_free_result(int result);
O comando mysql_free-result deve ser utilizado para apagar da memria o resultado indicado.

Nmero de linhas
int mysql_num_rows(int result);
O comando mysql_num_rows retorna o nmero de linhas contidas num resultado.

Utilizando os resultados
Existem diversas maneiras de ler os resultados de uma query SELECT. As mais comuns sero vistas a seguir:

int mysql_result(int result, int linha, mixed [campo] );


Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Retorna o contedo de uma clula da tabela de resultados.

result o identificador do resultado; linha o nmero da linha, iniciado por 0; campo uma string com o nome do campo, ou um nmero correspondente ao nmero da coluna. Se foi
utilizado um alias na consulta, este deve ser utilizado no comando mysql_result. Este comando deve ser utilizado apenas para resultados pequenos. Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir:

array mysql_fetch_array(int result);


L uma linha do resultado e devolve um array, cujos ndices so os nomes dos campos. A execuo seguinte do mesmo comando ler a prxima linha, at chegar ao final do resultado.

array mysql_fetch_row(int result);


Semelhante ao comando anterior, com a diferena que os ndices do array so numricos, iniciando pelo 0 (zero).

Alterando o ponteiro de um resultado


int mysql_data_seek(int result, int numero);
Cada resultado possui um ponteiro, que indica qual ser a prxima linha lida com o comando mysql_fetch_row (ou mysql_fetch_array). Para alterar a posio indicada por esse ponteiro deve ser utilizada a funo mysql_data_seek, sendo que o nmero da primeira linha de um resultado zero.

15. Acessando o PostgreSQL via PHP


Estabelecendo conexes
Para acessar bases de dados num servidor Postgres, necessrio antes estabelecer uma conexo. Para isso, deve ser utilizado o comando pg_connect, ou o pg_pconnect. A diferena entre os dois comandos que o pg_pconnect estabelece uma conexo permanente, ou seja, que no encerrada ao final da execuo do script. As assinaturas dos dois comandos so semelhantes, como pode ser verificado a seguir:

int pg_connect(string host, string porta, string opcoes, string tty, string db); int pg_pconnect(string host, string porta, string opcoes, string tty, string db);
Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

O valor de retorno um inteiro que identifica a conexo, ou falso se a conexo falhar. Uma conexo estabelecida com o comando pg_connect encerrada ao final da execuo do script. Para encerr-la antes disso deve ser utilizado o comando pg_close, que tem a seguinte assinatura:

int pg_close(int identificador da conexo );


IMPORTANTE: o comando pg_close no encerra conexes estabelecidas com o comando pg_pconnect. Os comandos pg_connect e pg_pconnect tambm podem ser utilizados da seguinte forma:

pg_connect("dbname=db port=n host=localhost tty=tty options=opcoes user=usuario password=senha");

Realizando consultas
Para executar consultas SQL no Postgres, utiliza-se o comando pg_exec, que tem a seguinte assinatura:

int pg_exec(int conexao, string query );


Onde query a expresso SQL a ser executada, sem o ponto-e-vrgula no final, e conexao o identificador da conexo a ser utilizada. A consulta ser executada na base de dados selecionada quando for efetuada a conexo com o banco. Para saber qual a base de dados selecionada, basta utilizar a funo string pg_dbname, que tem a seguinte assinatura:

string pg_dbname(int conexo);


bom lembrar que uma consulta no significa apenas um comando SELECT. A consulta pode conter qualquer comando SQL aceito pelo banco. O valor de retorno falso se a expresso SQL for incorreta, e diferente de zero se for correta. No caso de uma expresso SELECT, as linhas retornadas so armazenadas numa memria de resultados, e o valor de retorno o identificador do resultado. Alguns comandos podem ser realizados com esse resultado:

Verificando o erro na execuo de uma query


Para ter acesso mensagem de erro no caso de falha na execuo de uma query SQl, basta utilizar o comando pg_errormessage():

string pg_errormessage(int connection);

Apagando o resultado
int pg_freeresult(int result);
O comando pg_freeresult deve ser utilizado para apagar da memria o resultado indicado. No PHP 4, este comando tornou-se obsoleto, j que o interpretador trata de apagar o resultado automaticamente em caso de no ser mais utilizado.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Nmero de linhas
int pg_numrows(int result);
O comando pg_numrows retorna o nmero de linhas contidas num resultado.

Utilizando os resultados
Existem diversas maneiras de ler os resultados de uma query SELECT. As mais comuns sero vistas a seguir:

int pg_result(int result, int linha, mixed [campo] );


Retorna o contedo de uma clula da tabela de resultados.

result o identificador do resultado; linha o nmero da linha, iniciado por 0; campo uma string com o nome do campo, ou um nmero correspondente ao nmero da coluna. Se foi
utilizado um alias na consulta, este deve ser utilizado no comando pg_result. Este comando deve ser utilizado apenas para resultados pequenos. Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir:

array pg_fetch_array(int result, int linha);


L uma linha do resultado e devolve um array, cujos ndices so os nomes dos campos. O ndice das linhas iniciado por zero.

array pg_fetch_row(int result, int linha);


Semelhante ao comando anterior, com a diferena que os ndices do array so numricos, iniciando pelo 0 (zero).

16. Utilizando headers


O comando header permite enviar cabealhos html para o cliente. Deve ser utilizado por usurios que conheam a funo de cada header que pode ser enviado. No pode ser enviado depois de algum texto. veja o seguinte exemplo:

<html> <? header("Location: http://www.php.net"); ?> <body> ...


O cdigo acima causar um erro, j que tentou-se enviar um header depois de ter sido enviado um texto(<html>\n). A sintaxe do comando header bastante simples:

int header(string header);

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Algumas utilizaes do header so:

//redirecionar para outra pgina: header("Location: http://www.php.net"); // Definir o script como uma mensagem de erro: header("http/1.0 404 Not Found"); // Definir a expirao da pgina: header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Pragma: nocache"); // HTTP/1.0
Para obter uma lista completa dos headers HTTP, visite o seguinte endereo:

http://www.w3.org/Protocols/rfc2068/rfc2068

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

17. Utilizando cookies


O que so
Cookies so variveis gravadas no cliente(browser) por um determinado site. Somente o site que gravou o cookie pode ler a informao contida nele. Este recurso muito til para que determinadas informaes sejam fornecidas pelo usurio apenas uma vez. Exemplos de utilizao de cookies so sites que informam a quantidade de vezes que voc j visitou, ou alguma informao fornecida numa visita anterior. Existem cookies persistentes e cookies de sesso. Os persistentes so aqueles gravados em arquivo, e que permanecem aps o browser ser fechado, e possuem data e hora de expirao. Os cookies de sesso no so armazenados em disco e permanecem ativos apenas enquanto a sesso do browser no for encerrada. Por definio, existem algumas limitaes para o uso de cookies, listadas a seguir: 1 300 cookies no total 2 4 kilobytes por cookie. 3 20 cookies por servidor ou domnio.

Gravando cookies
Para gravar cookies no cliente, deve ser utilizada a funo setcookie, que possui a seguinte assinatura:

int setcookie(string nome, string valor, int exp, string path, string dominio, int secure);
onde: nome: nome do cookie; valor: valor armazenado no cookie; exp: data de expirao do cookie (opcional), no formato Unix. Se no for definida, o cookie ser de sesso; path: path do script que gravou o cookie; dominio: domnio responsvel pelo cookie; secure: se tiver valor 1, indica que o cookie s pode ser transmitido por uma conexo segura (https). Observaes: Um cookie no pode ser recuperado na mesma pgina que o gravou, a menos que esta seja recarregada pelo browser. Mltiplas chamadas funo setcookie sero executadas em ordem inversa; Cookies s podem ser gravados antes do envio de qualquer informao para o cliente. Portanto todas as chamadas funo setcookie devem ser feitas antes do envio de qualquer header ou texto.

Lendo cookies gravados


Os cookies lidos por um script PHP ficam armazenados em duas variveis. no array $HTTP_COOKIE_VARS[], tendo como ndice a string do nome do cookie, e numa varivel cujo nome o mesmo do cookie, precedido Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA pelo smbolo $. Exemplo:

Um cookie que foi gravado numa pgina anterior pelo seguinte comando: setcookie(teste, meu cookie); Pode ser lida pela varivel $HTTP_COOKIE_VARS[teste] ou pela varivel $teste

18. Manipulando arquivos


Atravs do PHP possvel ter acesso aos arquivos do sistema, e at arquivos remotos. A seguir veremos alguns dos comandos utilizados para manipular arquivos no PHP.

Copiando Arquivos
Para fazer uma cpia de arquivo utilizando PHP basta utilizar a funo copy, desde que o usurio tenha as permisses necessrias para isso. A assinatura da funo copy a seguinte:

int copy(string origem string destino);


Lembrando que as strings contendo origem e destino devem conter os caminhos completos. Retorna false caso a cpia no seja realizada.

Verificando o tamanho de um arquivo


A funo filesize pode ser bastante til na criao de um script que liste o contedo de um diretrio, mas tambm utilizada em casos como a funo fread, que ser vista mais adiante.

int filesize(string arquivo);


Esta funo retorna um inteiro com o tamanho do arquivo, em bytes, ou false em caso de erro.

Verificando se um arquivo existe


Para evitar erros em tratamento de arquivos, em certos casos aconselhvel verificar se determinado arquivo Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA existe. para isso deve ser utilizada a funo file_exists:

int file_exists(string arquivo);


Esta funo tem um comportamento booleano: retorna apenas true ou false, no informando mais nada sobre o arquivo.

Limpando o cache
Por terem execuo lenta, algumas funes que verificam o estado de arquivos utilizam um cache, ou seja, chamadas sucessivas da mesma funo com relao ao mesmo arquivo no verificam se houve mudana no mesmo, retornando sempre o mesmo valor. Para eliminar esse cache, obrigando o PHP a reavaliar o valor de retorno de uma funo, deve ser utilizada a seguinte funo:

void clearstatcache();
A palavra void indica que a funo no retorna valor algum. As funes filesize e file_exists utilizam cache.

Abrindo arquivos para leitura e/ou escrita


Para ler ou escrever num arquivo preciso antes de qualquer coisa abri-lo. Para isso deve ser utilizada a funo fopen, como visto a seguir:

int fopen(string arquivo, string modo, int [use_include_path]);


A funo fopen retorna false em caso de erro, e um identificador do arquivo em caso de sucesso. Esse identificador ser utilizado em outras funes que manipulam o contedo do arquivo. O primeiro argumento uma string contendo o nome do arquivo; o segundo, o modo como o arquivo ser aberto, que pode ser um dos seguintes:

r r+ w w+ a a+

Abre o arquivo com permisso apenas para leitura. Abre o arquivo com permisso para escrita e leitura, posicionando o ponteiro no incio do mesmo. Abre o arquivo com permisso apenas para escrita. Se o arquivo existir, todo o contedo apagado. Se no existir, o PHP tenta cri-lo. O ponteiro posicionado no incio do arquivo Abre o arquivo com permisso para escrita e leitura. Se o arquivo existir, todo o contedo apagado. Se no existir, o PHP tenta cri-lo. O ponteiro posicionado no incio do arquivo Abre o arquivo com permisso apenas para escrita. Se o arquivo no existir, o PHP tenta cri-lo. O ponteiro posicionado no final do arquivo Abre o arquivo com permisso para escrita e leitura. Se o arquivo no existir, o PHP tenta cri-lo. O ponteiro posicionado no final do arquivo.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA O ponteiro citado na tabela dos modos de abrir um arquivo refere-se posio a partir de onde os dados sero lidos e/ou gravados. Para alterar a posio desse ponteiro, pode-se utilizar a funo fseek:

int fseek(int fp, int posio);


Onde fp um identificador de arquivo, retornado da funo fopen. O terceiro parmetro da funo fopen, que pode ter valor 0 ou 1 indica se o include_path dever ser utilizado para localizar o arquivo. O include_path um parmetro determinado no php.ini que indica exatamente em quais diretrios determinados arquivos sero procurados. Alm de abrir arquivos localmente, utilizando o sistema de arquivos, a funo fopen tambm permite abrir arquivos remotos, utilizando os protocolos http ou ftp, da seguinte maneira: Se a string como o nome do arquivo iniciar por http:// (maisculas e minsculas so iguais), uma conexo aberta com o servidor e o arquivo contendo o texto de retorno ser aberto. ATENO: qualquer alterao feita no arquivo afetar apenas o arquivo temporrio local. O original ser mantido. Se a string como o nome do arquivo iniciar por ftp:// (maisculas e minsculas so iguais), uma conexo aberta com o servidor e o arquivo ser aberto. utilizando ftp o arquivo poder ser aberto para leitura ou escrita, mas no simultaneamente.

Para encerrar a manipulao de um arquivo deve-se utilizar a funo fclose, que tem o seguinte formato:
int fclose(int fp);
Onde fp o identificador do arquivo, retornado pela funo fopen.

Lendo de um arquivo
string fread(int fp, int tamanho);
Esta funo retorna uma string com o contedo do arquivo. O segundo parmetro determina at onde o arquivo ser lido. Se o tamanho determinado for maior que o arquivo, no ocorre erro, tendo como retorno apenas o arquivo. Na maioria dos casos a funo filesize bastante til, como no exemplo abaixo:

$meuarquivo = c:/autoexec.bat; $id = fopen($meuarquivo, r); $conteudo = fread($id,filesize($meuarquivo));


A funo fread binary-safe, ou seja, pode ser usada para ler o contedo de um arquivo binrio. Obviamente nesse caso preciso saber exatamente onde utilizar o valor lido, para no obter resultados indesejados.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Escrevendo em um arquivo
int fwrite(int fp, string conteudo, int [tamanho]);
Esta funo grava num arquivo o contedo do segundo parmetro. Se o tamanho fornecido e for menor que o tamanho da string, ser feita a gravao apenas de uma parte da mesma, determinada pelo terceiro parmetro.

Exemplo
Para demonstrar a leitura de um arquivo, utilizaremos um exemplo que necessita apenas de uma imagem do tipo GIF, que deve estar no mesmo diretrio que nosso script de exemplo.

<? $arquivo = teste.gif; /* este nome deve ser alterado para o nome do arquivo a ser utilizado */ $id = fopen($arquivo, r); /* abre o arquivo para leitura */ $conteudo = fread($id,filesize($arquivo)); /* le o conteudo do arquivo e grava na variavel $conteudo */ fclose($id); /* fecha o arquivo */ header(Content-type: image/gif); /* esta linha envia um header ao browser informando que o tipo de arquivo que est sendo enviado uma imagem no formato gif */ echo $conteudo; /* esta ltima linha envia ao browser o contedo do arquivo */ ?>
Para que o exemplo funcione corretamente preciso que o script seja apenas o que est listado, no podendo haver texto algum (nem mesmo espao ou linha em branco) antes e depois do script. Visualisando o script pelo browser, teremos a imagem selecionada.

Uploads com formulrios HTML


Vimos no captulo 03 que os formulrios HTML tm um tipo de componente utilizado em upload de arquivos. Vimos tambm que todos os elementos de formulrios quando submetidos a scripts PHP criam variveis com os mesmos nomes. mas no caso do elemento file, o tratamento diferente. Ao ser submetido o formulrio, o arquivo uploadeado gravado num arquivo temporrio do disco, que ser apagado ao final da execuo do script. Alm disso, quatro variveis so criadas no contexto do script PHP. $meuarquivo nome do arquivo temporario criado; $meuarquivo_name nome original do arquivo selecionado pelo usurio; $meuarquivo_size tamanho do arquivo enviado; $meuarquivo_type tipo do arquivo, se esta informao for fornecida pelo browser;

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Neste exemplo, meu arquivo o nome do elemento do formulrio. Para armazenar o contedo de um arquivo numa tabela da base de dados ou at num arquivo definitivo (neste segundo caso mais simples utilizar a funo copy) podemos utilizar o seguinte script, supondo que o campo do formulrio tenha o nome teste:

<? $id = fopen($teste, r); /* abre o arquivo para leitura */ $teste_conteudo = fread($id,filesize($teste)); /* le o conteudo do arquivo e grava na variavel $conteudo */ fclose($id); /* fecha o arquivo */ ?>
Com o exemplo acima, teremos o conteudo do arquivo enviado armazenado na string $teste_conteudo, podendo assim ser armazenado onde for mais adequado.

19. Enviando e-mail


Para enviar e-mail atravs de um script PHP bastante simples. Basta utilizar a funo mail: mail(string to, string subject, string message, string [headers]); onde: to string contendo o e-mail do destinatrio; subject assunto da mensagem; message o corpo da mensagem. headers outras informaes de cabealho, como por exemplo from, reply-to, bcc, etc. Para facilitar a compreenso dos scripts, os argumentos (como geralmente so strings grandes) devem ser atribudos a variveis antes da chamada da funo mail.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

20. Bibliografia e Referncias


A pesquisa foi baseada no manual de PHP, disponvel em www.php.net, e em diversos tutoriais disponveis no site www.phpbuilder.com. Esses dois endereos contm uma vasta documentao sobre a linguagem, alm de endereos para listas de discusso, onde pode-se solicitar ajuda de programadores mais experientes. Uma boa referncia em portugus a lista PHP para quem fala Portugus, que pode ser assinada no endereo www.egroups.com/group/php-pt/. Em ingls, alm dos endereos citados acima, uma boa fonte o site PHPWizard, que pode ser encontrado em www.phpwizard.net. Tambm em ingls, uma documentao mais completa sobre cookies pode ser encontrada em www.netscape.com/newsref/std/cookie_spec.html.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

APNDICE 01 - Funes para tratamento de strings


Funes relacionadas a HTML
htmlspecialchars
string htmlspecialchars(string str);
Retorna a string fornecida, substituindo os seguintes caracteres: & para '&amp;' " para '&quot;' < para '&lt;' > para &gt;'

htmlentities
string htmlentities(string str);
Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte todos os caracteres da string que possuem uma representao especial em html, como por exemplo: para '&ordm;' para '&ordf;' para '&aacute;' para &ccedil;'

nl2br
string nl2br(string str);
Retorna a string fornecida substituindo todas as quebras de linha (\n) por quebras de linhas em html (<br>).

Exemplo: echo nl2br(Mauricio\nVivas\n); Imprime: Maurcio<br>Vivas<br>

get_meta_tags
array get_meta_tags(string arquivo);
Abre um arquivo html e percorre o cabealho em busca de meta tags, retornando num array todos os valores encontrados. Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Exemplo: No arquivo teste.html temos: ... <head> <meta name="author" content="jose"> <meta name="tags" content="php3 documentation"> ... </head><!-- busca encerra aqui --> ... a execuo da funo: get_meta_tags(teste.html); retorna o array: array(author=>jose,tags=>"php3 documentation");

strip_tags
string strip_tags(string str);
Retorna a string fornecida, retirando todas as tags html e/ou PHP encontradas.

Exemplo: strip_tags('<a href="teste1.php3">testando</a><br>'); Retorna a string testando

urlencode
string urlencode(string str);
Retorna a string fornecida, convertida para o formato urlencode. Esta funo til para passar variveis para uma prxima pgina.

urldecode
string urldecode(string str);
Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato urlencode para texto normal.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Funes relacionadas a arrays


Implode e join
string implode(string separador, array partes); string join(string separador, array partes);
As duas funes so idnticas. Retornam uma string contendo todos os elementos do array fornecido separados pela string tambm fornecida.

Exemplo: $partes = array("a", "casa nmero", 13, " azul"); $inteiro = join(" ",$partes); $inteiro passa a conter a string: a casa nmero 13 azul

split
array split(string padrao, string str, int [limite]);
Retorna um array contendo partes da string fornecida separadas pelo padro fornecido, podendo limitar o nmero de elementos do array.

Exemplo: $data = 11/14/1975; $data_array = split(/,$data); O cdigo acima faz com que a varivel $data_array receba o valor: array(11,14,1975);

explode
array explode(string padrao, string str);
Funciona de maneira bastante semelhante funo split, com a diferena que no possvel estabelecer um limite para o nmero de elementos do array.

Comparaes entre strings


similar_text
int similar_text(string str1, string str2, double [porcentagem]);
Compara as duas strings fornecidas e retorna o nmero de caracteres coincidentes. Opcionalmente pode ser fornecida uma varivel, passada por referncia (ver tpico sobre funes), que receber o valor percentual de Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA igualdade entre as strings. Esta funo case sensitive, ou seja, maisculas e minsculas so tratadas como diferentes.

Exemplo: $num = similar_text("teste", "testando",&$porc); As variveis passam a ter os seguintes valores: $num == 4; $porc == 61.538461538462

strcasecmp
int strcasecmp(string str1, string str2);
Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um valor menor que zero se str1 < str2. Esta funo case insensitive, ou seja, maisculas e minsculas so tratadas como iguais.

strcmp
int strcasecmp(string str1, string str2);
Funciona de maneira semelhante funo strcasecmp, com a diferena que esta case sensitive, ou seja, maisculas e minsculas so tratadas como diferentes.

strstr
string strstr(string str1, string str2); string strchr(string str1, string str2);
As duas funes so idnticas. Procura a primeira ocorrncia de str2 em str1. Se no encontrar, retorna uma string vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto.

Exemplo: strstr("Mauricio Vivas", "Viv"); // retorna Vivas

stristr
string strstr(string str1, string str2);
Funciona de maneira semelhante funo strstr, com a diferena que esta case insensitive, ou seja, maisculas e minsculas so tratadas como iguais.

strpos
int strpos(string str1, string str2, int [offset] );
Retorna a posio da primeira ocorrncia de str2 em str1, ou zero se no houver. O parmetro opcional offset determina a partir de qual caracter de str1 ser efetuada a busca. Mesmo utilizando o offset, o valor de retorno Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA referente ao incio de str1.

strrpos
int strrpos(string haystack, char needle);
Retorna a posio da ltima ocorrncia de str2 em str1, ou zero se no houver.

Funes para edio de strings


chop
string chop(string str);
Retira espaos e linhas em branco do final da string fornecida.

Exemplo: chop( Teste \n \n ); // retorna Teste

ltrim
string ltrim(string str);
Retira espaos e linhas em branco do final da string fornecida.

Exemplo: ltrim( Teste \n \n ); // retorna Teste \n \n

trim
string trim(string str);
Retira espaos e linhas em branco do incio e do final da string fornecida.

Exemplo: trim( Teste \n \n ); // retorna Teste

strrev
string strrev(string str);
Retorna a string fornecida invertida.

Exemplo:
Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

strrev(Teste); // retorna etseT

strtolower
string strtolower(string str);
Retorna a string fornecida com todas as letras minsculas.

Exemplo: strtolower(Teste); // retorna teste

strtoupper
string strtoupper(string str);
Retorna a string fornecida com todas as letras maisculas.

Exemplo: strtolower(Teste); // retorna TESTE

ucfirst
string ucfirst(string str);
Retorna a string fornecida com o primeiro caracter convertido para letra maiscula.

Exemplo: ucfirst(teste de funcao); // retorna Teste de funcao

ucwords
string ucwords(string str);
Retorna a string fornecida com todas as palavras iniciadas por letras maisculas.

Exemplo: ucwords(teste de funcao); // retorna Teste De Funcao

str_replace
string str_replace(string str1, string str2, string str3);
Altera todas as ocorrncias de str1 em str3 pela string str2. Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Funes diversas
chr
string chr(int ascii);
Retorna o caracter correspondente ao cdigo ASCII fornecido.

ord
int ord(string string);
Retorna o cdigo ASCII correspontente ao caracter fornecido.

echo
echo(string arg1, string [argn]... );
Imprime os argumentos fornecidos.

print
print(string arg);
Imprime o argumento fornecido.

strlen
int strlen(string str);
Retorna o tamanho da string fornecida.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

APNDICE 02 - Funes para tratamento de arrays


Funes Genricas
Array
array array(...);
a funo que cria um array a partir dos parmetros forncidos. possvel fornecer o ndice de cada elemento. Esse ndice pode ser um valor de qualquer tipo, e no apenas de inteiro. Se o ndice no for fornecido o PHP atribui um valor inteiro sequencial, a partir do 0 ou do ltimo ndice inteiro explicitado. Vejamos alguns exemplos:

Exemplo 1 $teste = array("um", "dois","tr"=>"tres",5=>"quatro","cinco"); Temos o seguinte mapeamento: 0 => um (0 o primeiro ndice, se no houver um explicito) 1 => dois (o inteiro seguinte) tr => tres 5 => quatro (valor explicitado) 6 => cinco (o inteiro seguinte ao ltimo atribudo, e no o prximo valor, que seria 2) Exemplo 2 $teste = array("um", 6=>"dois","tr"=>"tres",5=>"quatro","cinco"); Temos o seguinte mapeamento: 0 => um 6 => dois tr => tres 5 => quatro (seria 7, se no fosse explicitado) 7 => cinco (seria 6, se no estivesse ocupado)
Em geral, no recomendvel utilizar arrays com vrios tipos de ndices, j que isso pode confundir o programador. No caso de realmente haver a necessidade de utilizar esse recurso, deve-se ter bastante ateno ao manipular os ndices do array.

range
array range(int minimo, int maximo);
A funo range cria um array cujos elementos so os inteiros pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parmetro for maior do que o do segundo, a funo retorna false (valor vazio).

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

shuffle
void shuffle(array &arr);
Esta funo embaralha o array, ou seja, troca as posies dos elementos aleatoriamente e no retorna valor algum.

sizeof
int sizeof(array arr);
Retorna um valor inteiro contendo o nmero de elementos de um array. Se for utilizada com uma varivel cujo valor no do tipo array, retorna 1. Se a varivel no estiver setada ou for um array vazio, retorna 0.

Funes de navegao
Toda varivel do tipo array possui um ponteiro interno indicando o prximo elemento a ser acessado no caso de no ser especificado um ndice. As funes seguintes servem para modificar esse ponteiro, permitindo assim percorrer um array para verificar seu contedo (chaves e elementos).

reset
mixed reset(array arr);
Seta o ponteiro interno para o primeiro elemento do array, e retorna o contedo desse elemento.

end
mixed end(array arr);
Seta o ponteiro interno para o ltimo elemento do array, e retorna o contedo desse elemento.

next
mixed next(array arr);
Seta o ponteiro interno para o prximo elemento do array, e retorna o contedo desse elemento. Obs.: esta no uma boa funo para determinar se um elemento o ltimo do array, pois pode retornar false tanto no final do array como no caso de haver um elemento vazio.

prev
mixed prev(array arr);
Seta o ponteiro interno para o elemento anterior do array, e retorna o contedo desse elemento. Funciona de maneira inversa a next.

pos
mixed pos(array arr);
Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Retorna o contedo do elemento atual do array, indicado pelo ponteiro interno.

key
mixed key(array arr);
Funciona de maneira bastante semelhante a pos, mas ao invs de retornar o elemento atual indicado pelo ponteiro interno do array, retorna seu ndice.

each
array each(array arr);
Retorna um array contendo o ndice e o elemento atual indicao pelo ponteiro interno do array. o valor de retorno um array de quatro elementos, cujos ndices so 0, 1, key e value. Os elementos de ndices 0 e key armazenam o ndice do valor atual, e os elementos de ndices 1 e value contm o valor do elemento atual indicado pelo ponteiro. Esta funo pode ser utilizada para percorrer todos os elementos de um array e determinar se j foi encontrado o ltimo elemento, pois no caso de haver um elemento vazio, a funo no retornar o valor false. A funo each s retorna false depois q o ltimo elemento do array foi encontrado.

Exemplo: /*funo que percorre todos os elementos de um array e imprime seus ndices e valores */ function imprime_array($arr) { reset($arr); while (list($chave,$valor) = each($arr)) echo Chave: $chave. Valor: $valor; }

Funes de ordenao
So funes que servem para arrumar os elementos de um array de acordo com determinados critrios. Estes critrios so: manuteno ou no da associao entre ndices e elementos; ordenao por elementos ou por ndices; funo de comparao entre dois elementos.

sort
void sort(array &arr);
A funo mais simples de ordenao de arrays. Ordena os elementos de um array em ordem crescente, sem manter os relacionamentos com os ndices.

rsort
void rsort(array &arr);
Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Funciona de maneir ainversa funo sort. Ordena os elementos de um array em ordem decrescente, sem manter os relacionamentos com os ndices.

asort
void asort(array &arr);
Tem o funcionamento bastante semelhante funo sort. Ordena os elementos de um array em ordem crescente, porm mantm os relacionamentos com os ndices.

arsort
void arsort(array &arr);
Funciona de maneira inversa funo asort. Ordena os elementos de um array em ordem decrescente e mantm os relacionamentos dos elementos com os ndices.

ksort
void ksort(array &arr);
Funo de ordenao baseada nos ndices. Ordena os elementos de um array de acordo com seus ndices, em ordem crescente, mantendo os relacionamentos.

usort
void usort(array &arr, function compara);
Esta uma funo que utiliza outra funo como parmetro. Ordena os elementos de um array sem manter os relacionamentos com os ndices, e utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.

uasort
void uasort(array &arr, function compara);
Esta funo tambm utiliza outra funo como parmetro. Ordena os elementos de um array e mantm os relacionamentos com os ndices, utilizando para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.

uksort
void uksort(array &arr, function compara);
Esta funo ordena o array atravs dos ndices, mantendo os relacionamentos com os elementos., e utiliza Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA para efeito de comparao uma funo definida pelo usurio, que deve comparar dois ndices do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

APNDICE 03 Tipos suportados pelo mySQL


Numricos
Nome do tipo Espao utilizado 1 byte 2 bytes 3 bytes 4 bytes 4 bytes 8 bytes 4 if X <= 24 or 8 if 25 <= X <= 53 4 bytes 8 bytes 8 bytes 8 bytes M bytes (D+2, if M < D) M bytes (D+2, if M < D)

TINYINT SMALLINT MEDIUMINT INT INTEGER BIGINT FLOAT(X) FLOAT DOUBLE DOUBLE PRECISION REAL DECIMAL(M,D) NUMERIC(M,D)

Data e Hora
Nome do tipo

DATE DATETIME TIMESTAMP TIME YEAR

Espao utilizado 3 bytes 8 bytes 4 bytes 3 bytes 1 byte

Strings
Nome do tipo Espao utilizado

CHAR(M) VARCHAR(M) TINYBLOB, TINYTEXT BLOB, TEXT

M bytes, 1 <= M <= 255 L+1 bytes, onde L <= M e 1 <= M <= 255 L+1 bytes, onde L < 2^8 L+2 bytes, onde L < 2^16
www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Curso de Aplicaoes WEB em PHP -

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

MEDIUMBLOB, MEDIUMTEXT LONGBLOB, LONGTEXT ENUM('value1','value2', ...) SET('value1','value2',... )

L+3 bytes, onde L < 2^24 L+4 bytes, onde L < 2^32
1 ou 2 bytes 1, 2, 3, 4 ou 8 bytes

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Notas do autor
Este documento foi criado inicialmente como parte do projeto de concluso de curso da Universidade Federal de Sergipe, e distribudo gratuitamente atravs da Internet. Depois de terminado o projeto, recebi diversas sugestes sobre contedo a incluir, e tambm passei a dar cursos de PHP em diversas instituies de Sergipe. Diante disso, continuei a escrever o documento, sendo algumas incluses para atender s sugestes e outras para utilizar nos cursos. Como poder ser observado principalmente no captulo 05, o documento no est concludo, e nem sei se algum dia estar, tendo em vista que o uso de PHP cresce cada vez mais, e ainda falta muito a ser dito sobre ele aqui. Apesar de citar em alguns pontos o PHP4, o documento ainda baseado em PHP3, lanado h menos de um ms. Porm todo o contedo que segue compatvel com PHP4, e por isso no h problema em lanar esta nova verso baseada em PHP3. Se voc tem uma pgina com tutoriais, ou gostou deste documento e quer public-lo em seu site, fique vontade. S peo duas coisas:
0* Me avise, informando a URL do site (s por curiosidade minha); 1* Lembre-se que o autor do documento sou eu. Apesar de ainda no ter visto, j fui

informado que h cpias piratas deste documento. Mas quero lembrar que no preciso piratear algo completamente GRATUITO.
2*

Se houver alguma informao incorreta, peo que me informem por e-mail. Se tiverem dvidas sobre temas tratados aqui, ou at sobre os ainda no presentes neste documento, entrem em contato comigo por e-mail. Para obter a verso original do documento, voc pode pedir por e-mail, ou visitar o site www.vivas.com.br. Meu e-mail pessoal? mauricio@vivas.com.br.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Controle de verses
Data Autor Observaes
Verso inicial disponibilizada no CIPSGA Segunda Verso da apostila 11/05/00 Maurcio Vivas 19/06/00 Maurcio Vivas

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

GNU Free Documentation License


Version 1.1, March 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: E. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. F. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). G. State on the Title page the name of the publisher of the Modified Version, as the publisher. H. Preserve all the copyright notices of the Document. I. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. J. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. K. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. L. Include an unaltered copy of this License. M. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. N. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. O. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. P. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Q. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. R. N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. S. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a BackCover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on Curso de Aplicaoes WEB em PHP www.cipsga.org.br - cursos@cipsga.org.br Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires especial permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents. To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86

Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA

Comit de Incentivo a Produo do Software Gratuito e Alternativo

Fundado em 29 de janeiro de 1999.


1 Diretoria

Djalma Valois Filho Diretor Executivo


dvalois@cxpostal.com

Jos Luiz Nunes Poyares Diretor Administrativo

Paulo Roberto Ribeiro Guimares Diretor Institucional

CIPSGA Rua Professora Ester de Melo, numero 202, Parte, Benfica, Rio de Janeiro, RJ, CEP. 20930-010; Telefone (Fax/Dados): 021-5564201; e-mail: administracao@cipsga.org.br CNPJ: 03179614-0001/70

Curso de Aplicaoes WEB em PHP -

www.cipsga.org.br - cursos@cipsga.org.br

Pgina 86