You are on page 1of 89

“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”

Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
Curso de
Aplicaçoes
WEB em PHP
Autor: Mauricio Vivas
mauricio@cipsga.org.br
un!o de "###
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 1
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Curso de Aplicaçoes WEB em PHP
Comite de Incentivo a Produção
do Software ratuito e A!ternativo
CIPSA
Autor:
Mauricio Vivas
mauricio@cipsga.org.br
mauricio@vivas.com.br
"un#o de $%%%

Cop&rig#t 'c( $%%%) Mauricio Vivas.
Permission is granted to cop&) distribute and*or modif& t#is document under t#e terms of t#e
+, -ree .ocumentation /icense) Version 0.0 or an& !ater version pub!is#ed b& t#e -ree
Software -oundation1 wit# t#e Invariant Sections being /IS2 234I5 2I2/4S) wit# t#e -ront6Cover
2e7ts being /IS2) and wit# t#e 8ac96Cover 2e7ts being /IS2.
A cop& of t#e !icense is inc!uded in t#e section entit!ed :+, -ree .ocumentation /icense:.
Cop&rig#t 'c( $%%%) Mauricio Vivas
4 garantida a permissão para copiar) distribuir e*ou modificar este documento sob os termos da +, -ree
.ocumentation /icense) versão 0.0 ou ;ua!;uer outra versão posterior pub!icada pe!a -ree Software -oundation1 sem
obrigatoriedade de Seç<es Invariantes na abertura e ao fina! dos te7tos.
,ma copia da !icença deve ser inc!u=da na seção intitu!ada +, -ree .ocumentation /icense.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
Índice geral
01. INTRODUÇÃO................................................................................................................................8
CLIENT-SIDE SCRIPTS 8
SERVER-SIDE SCRIPTS 8
O QUE É PHP? 9
O QUE PODE SER FEITO COM PHP? 9
COMO SURGIU A LINGUAGEM PHP? 9
02. ENVIANDO DADOS PARA O SERVIDOR HTTP.........................................................................10
O MÉTODO GET 10
HEADERS 11
O MÉTODO POST 11
UTILIZANDO GET E POST 12
03. FORMULÁRIOS HTML.................................................................................................................12
DEFININDO UM FORMULÁRIO 12
A TAG <INPUT 1!
CAMPO DE TE"TO 1!
Parâmetros !"
CAMPO DE TE"TO COM MÁSCARA 1!
Parâmetros !#
CHEC#$O" 1%
Parâmetros !#
RADIO $UTTON 1%
Parâmetros !#
SU$MIT $UTTON 1%
Parâmetros !#
RESET $UTTON 1&
Parâmetros !$
$UTTON 1&
Parâmetros !$
TE"TAREA 1&
Parâmetros !$
SELECT 1&
Parâmetros !%
UPLOAD DE ARQUIVOS 1'
Parâmetros !%
04. INSTALAÇÃO E CONFIGURAÇÃO EM AMBIENTE WINDOWS................................................1
SERVIDOR APACHE 1'
PHP 1(
M)SQL 18
0!. INSTALAÇÃO E CONFIGURAÇÃO EM AMBIENTE LINU" REDHAT.......................................18
*DISPON+VEL NA PR,"IMA VERS-O. 18
0. SINTA"E BÁSICA........................................................................................................................1#
DELIMITANDO O C,DIGO PHP19
SEPARADOR DE INSTRU/0ES 19
NOMES DE VARIÁVEIS 19
COMENTÁRIOS 19
Coment&rios de uma linha '(
Coment&rios de mais de uma linha '(
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 3
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
IMPRIMINDO C,DIGO HTML 20
0$. TIPOS............................................................................................................................................21
TIPOS SUPORTADOS 21
)nteiros *integer ou long+ '!
,úmeros em Ponto -lutuante *dou.le ou float+ '!
/trings ''
S1231415678 22
0rra1s ''
L19:69 2!
2.3etos '#
4ooleanos '#
TRANSFORMA/-O DE TIPOS 2%
Coerç5es '#
6ransformação e7pl8cita de tipos '$
Com a função sett1pe '$
08. OPERADORES.............................................................................................................................2
ARITMÉTICOS 2'
DE STRINGS 2'
DE ATRI$UI/-O 2'
$IT A $IT 2(
L,GICOS 2(
COMPARA/-O 2(
E"PRESS-O CONDICIONAL 2(
DE INCREMENTO E DECREMENTO 28
0#. ESTRUTURAS DE CONTROLE...................................................................................................28
$LOCOS 28
COMANDOS DE SELE/-O 29
if '9
s:itch "(
COMANDOS DE REPETI/-O !2
:hile "'
do;;; :hile "'
for ""
QUE$RA DE FLU"O !!
4rea< ""
Continue "#
10. FUNÇ%ES.....................................................................................................................................34
DEFININDO FUN/0ES !%
VALOR DE RETORNO!'
ARGUMENTOS !'
Passagem de parâmetros por refer=ncia "%
0rgumentos com >alores pr?@definidos *default+ "A
CONTE"TO !(
ESCOPO !8
11. VARIÁVEIS E CONSTANTES......................................................................................................3#
DECLARA/-O DE UMA VARIÁVEL !9
O MODIFICADOR STATIC !9
VARIÁVEIS VARIÁVEIS %0
VARIÁVEIS ENVIADAS PELO NAVEGADOR %0
BRCencode #(
Btilizando arra1s #!
VARIÁVEIS DE AM$IENTE %1
VERIFICANDO O TIPO DE UMA VARIÁVEL %1
-unção que retorna o tipo da >ari&>el #!
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
-unç5es que testam o tipo da >ari&>el #'
DESTRUINDO UMA VARIÁVEL %2
VERIFICANDO SE UMA VARIÁVEL POSSUI UM VALOR %2
0 função isset #'
0 função empt1 #"
CONSTANTES PRÉ-DEFINIDAS %!
DEFININDO CONSTANTES %!
12. CLASSES E OB&ETOS................................................................................................................43
CLASSE %!
O$;ETO %%
A VARIÁVEL <THIS %%
SU$CLASSES %&
CONSTRUTORES %&
13. NOÇ%ES DE S'L.........................................................................................................................4
INTRODU/-O %'
ESTRUTURA DAS TA$ELAS %'
Comando Create #%
Comando Drop #A
Comando 0lter #A
MANIPULANDO DADOS DAS TA$ELAS %(
Comando /ECEC6 #A
Comando ),/ER6 #F
Comando BPD06E #F
Comando DECE6E #F
14. ACESSANDO O M(S'L VIA PHP...............................................................................................4#
ESTA$ELECENDO CONE"0ES %9
SELECIONANDO A $ASE DE DADOS &0
REALIZANDO CONSULTAS &0
0pagando o resultado $(
,úmero de linhas $(
Btilizando os resultados $(
0lterando o ponteiro de um resultado $!
1!. ACESSANDO O POSTGRES'L VIA PHP...................................................................................!1
ESTA$ELECENDO CONE"0ES &1
REALIZANDO CONSULTAS &2
Gerificando o erro na e7ecução de uma quer1 $'
0pagando o resultado $'
,úmero de linhas $'
Btilizando os resultados $'
1. UTILI)ANDO HEADERS..............................................................................................................!3
1$. UTILI)ANDO COO*IES...............................................................................................................!!
O QUE S-O &&
GRAVANDO COO#IES &&
LENDO COO#IES GRAVADOS &&
18. MANIPULANDO AR'UIVOS........................................................................................................!
COPIANDO ARQUIVOS &'
VERIFICANDO O TAMANHO DE UM ARQUIVO &'
VERIFICANDO SE UM ARQUIVO E"ISTE &'
LIMPANDO O CACHE &(
A$RINDO ARQUIVOS PARA LEITURA E=OU ESCRITA &(
LENDO DE UM ARQUIVO &8
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 5
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
ESCREVENDO EM UM ARQUIVO &9
E"EMPLO &9
UPLOADS COM FORMULÁRIOS HTML &9
1#. ENVIANDO E+MAIL......................................................................................................................0
20. BIBLIOGRAFIA E REFER,NCIAS...............................................................................................1
AP,NDICE 01 + FUNÇ%ES PARA TRATAMENTO DE STRINGS....................................................2
FUN/0ES RELACIONADAS A HTML '2
htmlspecialchars %'
htmlentities %'
nl'.r %'
getHmetaHtags %'
stripHtags %"
urlencode %"
urldecode %"
FUN/0ES RELACIONADAS A ARRA)S '%
)mplode e 3oin %#
split %#
e7plode %#
COMPARA/0ES ENTRE STRINGS'%
similarHte7t %#
strcasecmp %$
strcmp %$
strstr %$
stristr %$
strpos %$
strrpos %%
FUN/0ES PARA EDI/-O DE STRINGS ''
chop %%
ltrim %%
trim %%
strre> %%
strtolo:er %A
strtoupper %A
ucfirst %A
uc:ords %A
strHreplace %A
FUN/0ES DIVERSAS '8
chr %F
ord %F
echo %F
print %F
strlen %F
AP,NDICE 02 + FUNÇ%ES PARA TRATAMENTO DE ARRA(S.....................................................#
FUN/0ES GENÉRICAS '9
0rra1 %9
range %9
shuffle A(
sizeof A(
FUN/0ES DE >NAVEGA/-O? (0
reset A(
end A(
ne7t A(
pre> A(
pos A(
<e1 A!
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
each A!
FUN/0ES DE ORDENA/-O (1
sort A!
rsort A!
asort A'
arsort A'
<sort A'
usort A'
uasort A'
u<sort A'
AP,NDICE 03 - TIPOS SUPORTADOS PELO M(S'L....................................................................$4
NUMÉRICOS (%
DATA E HORA (%
STRINGS (&
NOTAS DO AUTOR............................................................................................................................$
CONTROLE DE VERS%ES................................................................................................................$$
GNU FREE DOCUMENTATION LICENSE.........................................................................................$8

Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 7
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
#*% Introdução
Client$Side Scripts
São respons>veis pe!as aç<es e7ecutadas no browser) sem contato com o servidor. ?s e7emp!os
mais comuns de ap!icaç<es c!ient6side são imagens e te7tos ;ue mudam com o passar do mouse.
?s scripts c!ient6side são muito @teis para faAer va!idaç<es de formu!>rios sem uti!iAar
processamento do servidor e sem provocar tr>fego na rede. ?utra uti!iAação comum B na
construção de interfaces dinCmicas e D!evesE.
Figura 1. Funcionamento de scripts client-side
Server$Side Scripts
?s scripts server6side são respons>veis pe!a criação de p>ginas em tempo rea!. +um mecanismo
de busca) por e7emp!o) seria invi>ve! manter um ar;uivo para cada consu!ta a ser rea!iAada. ?
;ue e7iste B um mode!o da p>gina de resposta) ;ue B mesc!ado com os dados no momento em
;ue a p>gina B re;uisitada.
Figura 2. Requisição Normal
Figura 3. Requisição de página dinâmica
+ ,ue - PHP.
P3P B uma !inguagem ;ue permite criar sites F48 dinCmicos) possibi!itando uma
interação com o usu>rio atravBs de formu!>rios) parCmetros da ,5/ e !in9s. A
diferença de P3P com re!ação a !inguagens seme!#antes a "avascript B ;ue o
cGdigo P3P B e7ecutado no servidor) sendo enviado para o c!iente apenas #tm!
puro. .esta maneira B poss=ve! interagir com bancos de dados e ap!icaç<es
e7istentes no servidor) com a vantagem de não e7por o cGdigo fonte para o
c!iente. Isso pode ser @ti! ;uando o programa est> !idando com sen#as ou
;ua!;uer tipo de informação confidencia!.
? ;ue diferencia P3P de um script CI escrito em C ou Per! B ;ue o cGdigo P3P fica embutido no
prGprio 32M/) en;uanto no outro caso B necess>rio ;ue o script CI gere todo o cGdigo 32M/) ou
!eia de um outro ar;uivo.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
+ ,ue pode ser feito com PHP.
8asicamente) ;ua!;uer coisa ;ue pode ser feita por a!gum programa CI pode ser feita tambBm
com P3P) como co!etar dados de um formu!>rio) gerar p>ginas dinamicamente ou enviar e
receber cookies.
P3P tambBm tem como uma das caracter=sticas mais importantes o suporte a um grande n@mero
de bancos de dados) como d8ase) Interbase) mSH/) m&SH/) ?rac!e) S&base) PostgreSH/ e v>rios
outros. Construir uma p>gina baseada em um banco de dados torna6se uma tarefa
e7tremamente simp!es com P3P.
A!Bm disso) P3P tem suporte a outros serviços atravBs de protoco!os como IMAP) S+MP) ++2P)
P?PI e) !ogicamente) 322P. Ainda B poss=ve! abrir sockets e interagir com outros protoco!os.
Como sur&iu a lin&ua&em PHP.
A !inguagem P3P foi concebida durante o outono de 0JJK por /asmus 0erdorf. As primeiras
vers<es não foram disponibi!iAadas) tendo sido uti!iAadas em sua home-page apenas para ;ue e!e
pudesse ter informaç<es sobre as visitas ;ue estavam sendo feitas. A primeira versão uti!iAada
por outras pessoas foi disponibi!iAada em 0JJL) e ficou con#ecida como DPersona! Home Page
2oo!sE 'ferramentas para p>gina pessoa!(. 4ra composta por um sistema bastante simp!es ;ue
interpretava a!gumas macros e a!guns uti!it>rios ;ue rodavam Dpor tr>sE das home-pages: um
!ivro de visitas) um contador e a!gumas outras coisas.
4m meados de 0JJL o interpretador foi reescrito) e gan#ou o nome de PHP12I) o D-IE veio de um
outro pacote escrito por 5asmus ;ue interpretava dados de formu!>rios 32M/ '2orm Interpreter(.
4!e combinou os scripts do pacote Personal Home Page Tools com o -I e adicionou suporte a
mSH/) nascendo assim o P3P*-I) ;ue cresceu bastante) e as pessoas passaram a contribuir com
o proMeto.
4stima6se ;ue em 0JJN P3P*-I estava sendo usado por cerca de 0L.%%% sites pe!o mundo) e em
meados de 0JJO esse n@mero subiu para mais de L%.%%%. +essa Bpoca #ouve uma mudança no
desenvo!vimento do P3P. 4!e dei7ou de ser um proMeto de 5asmus com contribuiç<es de outras
pessoas para ter uma e;uipe de desenvo!vimento mais organiAada. ? interpretador foi reescrito
por 3eev Suras4i e Andi Gutmans) e esse novo interpretador foi a base para a versão I.
? !ançamento do P3PK) ocorrido em $$*%L*$%%%) trou7e muitas novidades aos programadores de
P3P. ,ma das principais foi o suporte a sess<es) bastante @ti! pra identificar o c!iente ;ue
so!icitou determinada informação. A!Bm das mudanças referentes a sinta7e e novos recursos de
programação) o P3PK trou7e como novidade um otimiAador c#amado Pend) ;ue permite a
e7ecução muito mais r>pida de scripts P3P. A empresa ;ue produA o Pend promete para este
ano o !ançamento de um compi!ador de P3P. CGdigos compi!ados serão e7ecutados mais
rapidamente) a!Bm de proteger o fonte da ap!icação.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 9
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
#"% Enviando 5ados para o
Servidor H66P
Programar para a web pode ser considerado como um Mogo ;ue consiste em receber os dados do
usu>rio) process>6!os e enviar a resposta dinCmica. ,ma veA enviada a resposta) B encerrado o
contato entre o servidor e o c!iente. Portanto a primeira coisa a aprender B como faAer para
receber os dados enviados pe!o browser para o servidor.
? protoco!o 322P provQ dois principais mBtodos para enviar informaç<es para o servidor web)
a!Bm da ,5/ referente ao ar;uivo so!icitado. 4sses mBtodos são o P?S2 e o 42.
? protoco!o 322P*0.% tambBm especifica o mBtodo 34A.) uti!iAado apenas para transmitir
informaç<es do #eader) a!Bm dos mBtodos P,2 e .4/424) ;ue não serão abordados neste curso.
+ m-todo GE6
A especificação do protoco!o 322P*%.J 'a primeira imp!ementação do 322P( possu=a a definição
do mBtodo 42) uti!iAado pe!o browser para so!icitar um documento espec=fico.
Por e7emp!o: a seguinte re;uisição 322P retornaria o documento :inde7.#tm!:) !oca!iAado no
diretGrio do servidro c#amado DtesteE:
42 *teste*inde7.#tm! C5/-
.evemos notar ;ue a re;uisição 42 inicia com a pa!avra 42) inc!ui o documento so!icitado e
encerra com a combinação dos caracteres carriage return e line eed.
Para um me!#or entendimento) vocQ pode faAer uma re;uisição 42 conectando diretamente em
a!gum servidor F48) conectando atravBs de um programa de te!net 'gera!mente o servidor #ttp
uti!iAa a porta R%(. A resposta ser> o cGdigo da p>gina so!icitada.
te!net www.guia6aMu.com.br R%
2r&ing $%%.$K0.LJ.0N...
Connected to www.guia6aMu.com.br.
4scape c#aracter is STUS.
42 *inde7.p#pI
'... p>gina so!icitada ...(
Connection c!osed b& foreign #ost.
?bviamente a diferença do browser B ;ue e!e trata as informaç<es recebidas e e7ibe a p>gina M>
formatada.
AtravBs do mBtodo 42 tambBm B poss=ve! passar parCmetros da re;uisição ao servidor) ;ue
pode tratar esses va!ores e atB a!terar a resposta a depender de!es) como no e7emp!o abai7o:
te!net www.guia6aMu.com.br R%
2r&ing $%%.$K0.LJ.0N...
Connected to www.guia6aMu.com.br.
4scape c#aracter is STUS.
42 *inde7.p#pIVidW%%$K#orasXtipoW2a7i
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
'... p>gina so!icitada ...(
Connection c!osed b& foreign #ost.
+o e7emp!o são passados dois parCmetros: id e tipo. 4sses parCmetros estão no formato
con#ecido por ,5/encode) ;ue B deta!#ado no cap=tu!o %J.
Apesar de ser poss=ve! passar parCmetros uti!iAando o mBtodo 42) e com isso gerar p>ginas
dinamicamente) este mBtodo tem pe!o menos dois prob!emas ;ue em determinadas
circunstCncias podem ser considerados sBrios:
? primeiro B ;ue o 42 permite uma ;uantidade de dados passados !imitada a 0%$K caracteres)
o ;ue pode gerar perda de informaç<es em certos casos.
? segundo B ;ue pe!o fato de ;ue as informaç<es faAem parte da ,5/) todos os dados podem ser
vistos pe!o usu>rio. Isso pode ser e7tremamente perigoso ;uando informaç<es sigi!osas estão
envo!vidas 'sen#a) por e7emp!o(.
Headers
A versão 0.% do protoco!o 322P trou7e boas inovaç<es ao mesmo. ,ma de!as foi a criação de
#eaders nas mensagens de re;uisição e de resposta. ?s #eaders são informaç<es trocadas entre
o navegador e o servidor de maneira transparente ao usu>rio) e podem conter dados sobre o tipo
e a versão do navegador) a p>gina de onde partiu a re;uisição '!in9() os tipos de ar;uivos aceitos
como resposta) e uma sBrie de outras informaç<es.
Assim foi poss=ve! definir um outro mBtodo de re;uisição de ar;uivos) ;ue reso!veu os principais
prob!emas do mBtodo 42.
+ m-todo P+S6
AtravBs da uti!iAação de #eaders B poss=ve! enviar os parCmetros da ,5/ so!icitada sem e7por
esses dados ao usu>rio) e tambBm sem #aver um !imite de taman#o.
,ma cone7ão ao servidor 322P uti!iAando o mBtodo P?S2 seria a!go seme!#ante ao ;ue segue:
te!net www.guia6aMu.com.br R%
2r&ing $%%.$K0.LJ.0N...
Connected to www.guia6aMu.com.br.
4scape c#aracter is STUS.
P?S2 *inde7.p#pI
Accept Y*Y
Content6t&pe: app!ication*76www6form6ur!encoded
Content6!engt#:$$
idW%%$K#orasXtipoW2a7i
'... p>gina so!icitada ...(
Connection c!osed b& foreign #ost.
.evemos observar os #eaders enviados ao servidor: a !in#a DAcceptE informa os tipos de dados
;ue podem ser enviados como resposta 'no caso) todos(. A !in#a DContent6t&peE informa o tipo
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 11
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
de dado ;ue est> sendo enviado 'ur!encoded(. ? terceiro #eader B o mais importante pois
informa o taman#o do corpo da mensagem) ;ue contBm os parCmetros. ApGs todos os #eaders
#> um sa!to de !in#a e então B iniciado o corpo da mensagem) no formato ur!encoded.
?bviamente o usu>rio não deve se preocupar com os #eaders) em codificar os dados ou em
ca!cu!ar o taman#o do corpo da mensagem. ? browser faA isso de maneira transparente.
7tili8ando GE6 e P+S6
? mBtodo 42 pode ser uti!iAado atravBs da digitação de um endereço no !oca! apropriado do
navegador ou atravBs de um #iper!in9) ou seMa) uma referQncia de uma p>gina a outra. +esses
casos B preciso converter os dados para o formato ur!encode. A terceira maneira de uti!iAar o
42 B atravBs de formu!>rios 32M/) e neste caso o usu>rio não precisa se preocupar com a
codificação dos dados. A uti!iAação de formu!>rios 32M/ B a @nica maneira poss=ve! de submeter
dados pe!o mBtodo P?S2.
#9% 2ormul)rios H6:0
5efinindo um formul)rio
Por ser uma !inguagem de marcação) a sinta7e do 32M/ na maioria dos casos e7ige uma DtagE
de in=cio e uma de fina! da;ue!e b!oco. Z 47atamente isso ;ue ocorre com a definição de um
formu!>rio: uma tag no in=cio e outra no fina!) sendo ;ue todos os e!ementos do formu!>rio devem
estar entre as duas tags. Isto torna poss=ve! a inc!usão de mais de um formu!>rio num mesmo
#tm!. As tags citadas são:
[form nameWEE actionWEE met#odWEE enct&peWEE\
?nde temos:
name: o identificador do formu!>rio. ,ti!iAado principa!mente em Scripts c!ient6side '"avaScript(1
action: nome do script ;ue receber> os dados do formu!>rio ao ser submetido. Mais ] frente
estão abordadas as maneiras de tratar esses dados recebidos1
met!od: mBtodo de envio dos dados: get ou post1
enct;pe: formato em ;ue os dados serão enviados. ? defau!t B ur!encoded. Se for uti!iAado um
e!emento do tipo up!oad de ar;uivo 'fi!e( B preciso uti!iAar o tipo mu!tipart*form6data.
47emp!o:
[form actionW:e7emp!o.p#p: met#odW:post:\
'te7tos e e!ementos do form(
[*form\
Cada e!emento do formu!>rio deve possuir um nome ;ue ir> identific>6!o no momento em ;ue o
script indicado no AC2I?+ for tratar os dados.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
A ta& <input=
Muitos e!ementos de um formu!>rio #tm! são definidos pe!a tag [input\. Cada tipo de e!emento
possui parCmetros prGprios) mas todos possuem pe!o menos dois parCmetros em comum: t&pe)
;ue define o tipo de e!emento) e name) ;ue como M> foi dito define o nome da;ue!e e!emento.
Campo de 6e>to
[input t&peW:te7t: nameW:: va!ueW:: siAeW:: ma7!engt#W::\
? campo mais comum em formu!>rios. 47ibe na te!a um campo para entrada de te7to com
apenas uma !in#a.
Par?metros@
Aalue o va!or prB6definido do e!emento) ;ue aparecer> ;uando a p>gina for carregada1
Si8e ? taman#o do e!emento na te!a) em caracteres1
:a>len&t! ? taman#o m>7imo do te7to contido no e!emento) em caracteres1
Campo de 6e>to com :)scara
[input t&peW:password: nameW:: va!ueW:: siAeW:: ma7!engt#W::\
2ipo de campo seme!#ante ao anterior) com a diferença ;ue neste caso os dados digitados são
substitu=dos por asteriscos) e por isso são os mais recomendados para campos ;ue devam conter
sen#as. Z importante sa!ientar ;ue nen#uma criptografia B uti!iAada. Apenas não aparece na te!a
o ;ue est> sendo digitado.
Par?metros@
Aalue o va!or prB6definido do e!emento) ;ue aparecer> ;uando a p>gina for carregada1
Si8e ? taman#o do e!emento na te!a) em caracteres1
:a>len&t! ? taman#o m>7imo do te7to contido no e!emento) em caracteres1
C!ec4'o>
[input t&peW:c#ec9bo7: nameW:: va!ueW:: c#ec9ed\
,ti!iAado para campos de m@!tip!a esco!#a) onde o usu>rio pode marcar mais de uma opção.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 13
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Par?metros@
Aalue o va!or ;ue ser> enviado ao servidor ;uando o formu!>rio for submetido) no caso do
campo estar marcado
C!ec4ed ? estado inicia! do e!emento. Huando presente) o e!emento M> aparece marcado1
/adio Button
[input t&peW:radio: nameW:: va!ueW:: c#ec9ed\
,ti!iAado para campos de m@!tip!a esco!#a) onde o usu>rio pode marcar apenas uma opção. Para
agrupar v>rios e!ementos deste tipo) faAendo com ;ue e!es seMam e7c!usivos) basta atribuir o
mesmo nome a todos do grupo.
Par?metros@
Aalue o va!or ;ue ser> enviado ao servidor ;uando o formu!>rio for submetido) no caso do
campo estar marcado
C!ec4ed ? estado inicia! do e!emento. Huando presente) o e!emento M> aparece marcado1
Su'mit Button
[input t&peW:submit: nameW:: va!ueW::\
,ti!iAado para enviar os dados do formu!>rio para o script descrito na seção DactionE da definição
do formu!>rio
Par?metros@
Aalue o te7to ;ue aparecer> no corpo do botão.
/eset Button
[input t&peW:reset: nameW:: va!ueW::\
,ti!iAado para faAer todos os campos do formu!>rio retornem ao va!or origina!) ;uando a p>gina
foi carregada. 8astante uti!iAado como botão D!imparE) mas na rea!idade sG !impa os campos se
todos e!es tQm como va!or uma string vaAia.
Par?metros@
Aalue ^ o te7to ;ue aparecer> no corpo do botão.
Button
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
[input t&peW:button: nameW:: va!ueW::\
,ti!iAado norma!mente para ativar funç<es de scripts c!ient6side '"avaScript) por e7emp!o(. Sem
essa uti!iAação) não produA efeito a!gum
Par?metros@
Aalue ^ o te7to ;ue aparecer> no corpo do botão.
6e>tArea
[te7tarea co!sW:: rowsW:: nameW:: wrapW::\te7to[*te7tarea\
47ibe na te!a uma cai7a de te7to) com o taman#o definido pe!os parCmetros Dco!sE e DrowsE.
Par?metros@
Cols n@mero de co!unas do campo) em caracteres1
/owsn@mero de !in#as do campo) em caracteres1
Wrap Maneira como são tratadas as ;uebras de !in#a autom>ticas. ? va!or soft faA com ;ue o
te7to ;uebreE somente na te!a) sendo enviado para o servidor o te7to da maneira como foi
digitado1 ? va!or D#ardE faA com ;ue seMa enviado para o servidor da maneira como o te7to
aparece na te!a) com todas as ;uebras de !in#as inseridas automaticamente1 o va!or DoffE faA
com ;ue o te7to não ;uebre na te!a e nem ;uando enviado ao servidor.
Aalue ? e!emento do tipo te7tarea não possui o parCmetro Dva!ueE. ? va!or prB6definido do
campo B o te7to ;ue fica entre as tags [te7tarea\ e [*te7tarea\.
Select
[se!ect nameW:: siAeW:: mu!tip!e\
[option va!ueW::\te7to[*option\
[*se!ect\
Se o parCmetro DsiAeE tiver o va!or 0 e não #ouver o parCmetro Dmu!tip!eE) e7ibe na te!a uma
Dcombo bo7E. Caso contr>rio) e7ibe na te!a uma Dse!ect !istE
Par?metros@
Si8e n@mero de !in#as e7ibidas. .efau!t: 01
:ultiple parCmetro ;ue) se presente) permite ;ue seMam se!ecionadas duas ou mais !in#as)
atravBs das tec!as Contro! ou S#ift1
option Cada item do tipo DoptionE acrescenta uma !in#a ao se!ect1
value Va!or a ser enviado ao servidor se a;ue!e e!emento for se!ecionado. .efau!t: o te7to do
item1
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 15
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
te>t va!or a ser e7ibido para a;ue!e item. +ão B definido por um parCmetro) mas pe!o te7to ;ue
fica entre as tags [option\ e [*option\
7pload de ar,uivos
[input t&peW:fi!e: nameW:: siAeW::\
47ibe na te!a do browser um campo de te7to e um botão) ;ue ao c!icado abre uma Mane!a para
!oca!iAar um ar;uivo no disco. Para uti!iAar este tipo de componente) o formu!>rio dever> uti!iAar
o mBtodo DP?S2E e ter o parCmetro Denct&peE com o va!or :mu!tipart*form6data:.
Par?metros@
Si8e ^ ? taman#o do campo de te7to e7ibido.
#B% Instalação e confi&uração
em am'iente windows
Servidor Apac!e
? servidor #ttp ;ue ser> uti!iAado neste curso B o Apac#e) ;ue est> dispon=ve! para down!oad em
D#ttp:**www.apac#e.org*#ttpd.#tm!E. A insta!ação do Apac#e B bastante simp!es) simi!ar a
;ua!;uer ap!icação windows. A @nica restrição B ;ue o winsoc9$ deve estar insta!ado no sistema.
Se não estiver) o down!oad pode ser feito em:
#ttp:**www.microsoft.com*windowsJL*down!oads*contents*wuadmintoo!s*s_wunetwor9ingtoo!s*wJLsoc9ets$*
.epois de insta!ado) B necess>rio faAer a configuração do servidor) atravBs do ar;uivo #ttpd.conf.
2odas as configuraç<es estão comentadas. ? m=nimo ;ue deve ser configurado B o diretGrio onde
os documentos estarão) atravBs da opção .ocument5oot. 8asta procurar a opção e escrever o
nome do diretGrio em seguida) como no e7emp!o:
.ocument5oot :C:`vivas`:
,ma outra configuração b>sica B a .irector&Inde7) ;ue informa ao servidor ;uais os ar;uivos
serão e7ibidos automaticamente como =ndice do diretGrio. Z isso ;ue faA com ;ue ao digitar) por
e7emp!o)Dwww.guia6aMu.com.br) o servidor saiba ;ua! dos ar;uivos do diretGrio deve ser e7ibido.
Abai7o temos um e7emp!o da uti!iAação do .irector&Inde7:
.irector&Inde7 inde7.#tm! inde7.#tm inde7.p#pI
-eito isso) crie um ar;uivo com um dos nomes definidos como =ndice e co!o;ue no diretGrio
definido como root. 47ecute o servidor Apac#e e tente acessar o endereço D#ttp:**!oca!#ostE pe!o
browser. Se a p>gina for e7ibida) B por;ue o servidor foi insta!ado corretamente.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
PHP
? P3P pode ser conseguido em Dwww.p#p.netE) e sua insta!ação tambBm B simp!es. 8asta
descompactar os ar;uivos para o diretGrio Dc:`p#pIE e editar o ar;uivo de configuração. ?
ar;uivo Dp#pI.ini6distE deve ser copiado para o diretGrio do windows 'gera!mente c:`windows ou
c:`winnt( com o nome p#pI.ini. .epois de copiado) o ar;uivo pode ser editado) bastando
modificar a !in#a e7tension_dir) ;ue deve conter o diretGrio onde estão os mGdu!os 'c:`p#pI(.
VeMa o e7emp!o:
e7tension_dir W c:`p#pI
A!Bm disso B necess>rio descomentar a !in#a referente o mGdu!o m&s;!) M> ;ue iremos uti!iA>6!o
basta tirar o D1E 'ponto6e6v=rgu!a( do in=cio da !in#a:
1e7tensionWp#pI_m&s;!.d!!
-eito isso) podemos partir para a configuração do servidor Apac#e) necess>ria para ;ue este
recon#eça o P3P. 4ditando novamente o ar;uivo #ttpd.conf) as !in#as a seguir devem ser
adicionadas no fina! do ar;uivo:
ScriptA!ias *p#pI* :c:*p#pI*:
Add2&pe app!ication*76#ttpd6p#pI .p#pI .p#p
Action app!ication*76#ttpd6p#pI :*p#pI*p#p.e7e:
A primeira !in#a define o diretGrio onde est> o P3P. A segunda cria um DtipoE para o P3P) definido
;ue todos os ar;uivos com as e7tens<es D.p#pIE e D.p#pE devem passar pe!o interpretador P3P.
A terceira !in#a define o e7ecut>ve! do interpretador P3P.
.epois de sa!var o ar;uivo) podemos testar se a insta!ação do P3P foi bem sucedida. A me!#or
maneira B criar um ar;uivo c#amado teste.p#pI e sa!var no diretGrio raiA do servidor Apac#e. ?
ar;uivo deve conter a seguinte informação:
[V
p#pinfo'(1
V\
Acessando a p>gina atravBs do servidor '#ttp:**!oca!#ost*teste.p#pI() devemos ter como
resu!tado uma !istagem de todas as configuraç<es do P3P) inc!uindo o mGdu!o m&s;!) ;ue foi
definido como ativo no ar;uivo p#pI.ini.
m;SC0
? banco de dados m&SH/ pode ser conseguido em D#ttp:**www.m&s;!.com*down!oad.#tm!E. Sua
insta!ação tambBm B bastante simp!es) tambBm no mode!os de insta!ação de ;ua!;uer ap!icativo
para Findows.
As configuraç<es necess>rias são re!ativas a segurança) e e7igem um con#ecimento mais
avançado de administração de servidores. Como essa insta!ação destina6se apenas a praticar o
P3P) não B necess>rio faAer muitas a!teraç<es na segurança) bastando apenas saber como
adicionar usu>rios.
Para isto) basta uti!iAar o comando 5A+2) ;ue tem a seguinte sinta7e:
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 17
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
5A+2 privi!egio a'!ista_co!unas(U
a) privi!egio a'co!unas(U ...U
?+ btabe!a c Y c Y.Y c db.Yd
2? usuario aI.4+2I-I4. 8e fsen#aSU
a) usuario aI.4+2I-I4. 8e fsen#aSU ...U
aFI23 5A+2 ?P2I?+U
?nde privi!Bgio B uma das pa!avras reservadas !istadas a seguir:
A// P5IVI/44S
-I/4
54/?A.
A/245
I+.4g
S4/4C2
C54A24
I+S452
S3,2.?F+
.4/424
P5?C4SS
,P.A24
.5?P
54-454+C4S
,SA4
Cada pa!avra representa um tipo de acesso ]'s( co!una's() tabe!a's( ou base's( de dados !istadas
!ogo depois da c!>usu!a ?+.
,su>rio deve conter o nome do usu>rio '!ogin( e o #ost permitido 'e7.: teste@!oca!#ost(.
Abai7o temos um e7emp!o da uti!iAação do comando grant:
G/AD6 S4/4C2) I+S452) ,P.A24 +D Y
6+ vivas@!oca!#ost I5ED6I2IE5 BE Dsen#atesteE1
? e7emp!o cria o usu>rio DvivasE) com a sen#a Dsen#atesteE) ;ue sG pode acessar da mesma
m>;uina onde est> o servidor '!oca!#ost() e sG pode uti!iAar os comandos se!ect) insert e update.
2ambBm B poss=ve! adicionar usu>rios uti!iAando o comando I+S452) pra a!terar diretamente na
tabe!a de privi!Bgios) ;ue B a tabe!a DuserE da base de dados Dm&s;!E) ;ue possui os campos
para definir nome de usu>rio) #ost) sen#a) e permiss<es espec=ficas.
#F% Instalação e confi&uração
em am'iente linu> /edHat
G5isponHvel na prI>ima versãoJ
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
#K% Sinta>e B)sica
5elimitando o cIdi&o PHP
? cGdigo P3P fica embutido no prGprio 32M/. ? interpretador identifica ;uando um cGdigo B P3P
pe!as seguintes tags:
[Vp#p
comandos
V\
[script !anguageWEp#pE\
comandos
[*script\
[V
comandos
V\
[h
comandos
h\
? tipo de tags mais uti!iAado B o terceiro) ;ue consiste em uma DabreviaçãoE do primeiro. Para
uti!iA>6!o) B necess>rio #abi!itar a opção short-tags na configuração do P3P. ? @!timo tipo serve
para faci!itar o uso por programadores acostumados ] sinta7e de ASP. Para uti!iA>6!o tambBm B
necess>rio #abi!it>6!o no P3P) atravBs do ar;uivo de configuração php.ini.
Separador de instruçLes
4ntre cada instrução em P3P B preciso uti!iAar o ponto6e6v=rgu!a) assim como em C) Per! e outras
!inguagens mais con#ecidas. +a @!tima instrução do b!oco de script não B necess>rio o uso do
ponto6e6v=rgu!a) mas por ;uest<es estBticas recomenda6se o uso sempre.
Domes de vari)veis
2oda vari>ve! em P3P tem seu nome composto pe!o caracter i e uma string) ;ue deve iniciar por
uma !etra ou o caracter D_E. PHP - case sensitive) ou seMa) as vari>veis ivivas e iVIVAS são
diferentes. Por isso B preciso ter muito cuidado ao definir os nomes das vari>veis. Z bom evitar
os nomes em mai@scu!as) pois como veremos mais adiante) o P3P M> possui a!guma vari>veis
prB6definidas cuMos nomes são formados por !etras mai@scu!as.
Coment)rios
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 19
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
3> dois tipos de coment>rios em cGdigo P3P:
Coment)rios de uma lin!a@
Marca como coment>rio atB o fina! da !in#a ou atB o fina! do b!oco de cGdigo P3P o ;ue vier
antes. Pode ser de!imitado pe!o caracter DjE ou por duas barras ' ** (.
47emp!o:
[V ec#o DtesteE1 jisto B um teste V\
[V ec#o DtesteE1 **este teste B simi!ar ao anterior V\
Coment)rios de mais de uma lin!a@
2em como de!imitadores os caracteres D*YE para o in=cio do b!oco e DY*E para o fina! do
coment>rio. Se o de!imitador de fina! de cGdigo P3P ' V\ ( estiver dentro de um coment>rio) não
ser> recon#ecido pe!o interpretador.
47emp!os:
[V
ec#o DtesteE1 *Y Isto B um coment>rio com mais
de uma !in#a) mas não funciona corretamente V\
Y*
[V
ec#o DtesteE1 *Y Isto B um coment>rio com mais
de uma !in#a ;ue funciona corretamente
Y*
V\
Imprimindo cIdi&o !tml
,m script p#p gera!mente tem como resu!tado uma p>gina #tm!) ou a!gum outro te7to. Para
gerar esse resu!tado) deve ser uti!iAada uma das funç<es de impressão) ec#o e print. Para
uti!iA>6!as deve6se uti!iAar um dos seguintes formatos:
print'argumento(1
ec#o 'argumento0) argumento$) ... (1
ec#o argumento1
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
#M% 6ipos
6ipos Suportados
PHP suporta os se&uintes tipos de dados@
0. Inteiro
$. Ponto f!utuante
I. String
K. Arra&
L. ?bMeto
P3P uti!iAa c#ecagem de tipos dinCmica) ou seMa) uma vari>ve! pode conter va!ores
de diferentes tipos em diferentes momentos da e7ecução do script. Por este motivo
não B necess>rio dec!arar o tipo de uma vari>ve! para us>6!a. ? interpretador P3P
decidir> ;ua! o tipo da;ue!a vari>ve!) verificando o conte@do em tempo de e7ecução.
Ainda assim) B permitido converter os va!ores de um tipo para outro deseMado)
uti!iAando o t!pecasting ou a função sett&pe 'ver adiante(.
Inteiros Ginte&er ou lon&J
,ma vari>ve! pode conter um va!or inteiro com atribuiç<es ;ue sigam as seguintes sinta7es:
ivivas W 0$IK1 j inteiro positivo na base decima!
ivivas W 6$IK1 j inteiro negativo na base decima!
ivivas W %$IK1 j inteiro na base octa!6simbo!iAado pe!o %
j e;uiva!e a 0LN decima!
ivivas W %7IK1 j inteiro na base #e7adecima!'simbo!iAado
j pe!o %7( ^ e;uiva!e a L$ decima!.
A diferença entre inteiros simp!es e !ong est> no n@mero de b&tes uti!iAados para armaAenar a
vari>ve!. Como a esco!#a B feita pe!o interpretador P3P de maneira transparente para o usu>rio)
podemos afirmar ;ue os tipos são iguais.
DNmeros em Ponto 2lutuante Gdou'le ou floatJ
,ma vari>ve! pode ter um va!or em ponto f!utuante com atribuiç<es ;ue sigam as seguintes
sinta7es:
ivivas W 0.$IK1
ivivas W $IeK1 j e;uiva!e a $I%.%%%
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 21
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Strin&s
Strings podem ser atribu=das de duas maneiras:
I. uti!iAando aspas simp!es ' S ( ^ .esta maneira) o va!or da vari>ve! ser> e7atamente o te7to
contido entre as aspas 'com e7ceção de `` e `S ^ ver tabe!a abai7o(
K. uti!iAando aspas dup!as ' : ( ^ .esta maneira) ;ua!;uer vari>ve! ou caracter de escape ser>
e7pandido antes de ser atribu=do.
47emp!o:
[V
iteste W :Mauricio:1
ivivas W S666iteste66`nS1
ec#o :ivivas:1
V\
A sa=da desse script ser> :666iteste66`n:.
[V
iteste W :Mauricio:1
ivivas W :666iteste666`n:1
ec#o :ivivas:1
V\
A sa=da desse script ser> :666Mauricio66: 'com uma ;uebra de !in#a no fina!(.
A tabe!a seguinte !ista os caracteres de escape:
Sinta>e
"igniicado
`n +ova !in#a
`r 5etorno de carro 'seme!#ante
a `n(
`t 2abu!ação #oriAonta!
`` A prGpria barra ' ` (
`i ? s=mbo!o i
`f Aspa simp!es
`E Aspa dup!a
+o apQndice %0 est> dispon=ve! uma !ista das funç<es uti!iAadas no tratamento de strings.
Arra;s
Arra&s em P3P podem ser observados como mapeamentos ou como vetores inde7ados. Mais
precisamente) um va!or do tipo arra& B um dicion>rio onde os =ndices são as c#aves de acesso.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
Va!e ressa!tar ;ue os =ndices podem ser va!ores de ;ua!;uer tipo e não somente inteiros.
Inc!usive) se os =ndices forem todos inteiros) estes não precisam formar um interva!o cont=nuo.
Como a c#ecagem de tipos em P3P B dinCmica) va!ores de tipos diferentes podem ser usados
como =ndices de arra&) assim como os va!ores mapeados tambBm podem ser de diversos tipos.
47emp!o:
[V
icora0U W Dverme!#oE1
icora$U W DverdeE1
icoraIU W DaAu!E1
icoraDtesteEU W 01
V\
4;uiva!entemente) pode6se escrever:
[V
icor W arra&'0 W\ Dverme!#o) $ W\ Dverde) I W\ DaAu!E) Dteste W\ 0(1
V\
#istas
As !istas são uti!iAadas em P3P para rea!iAar atribuiç<es m@!tip!as. AtravBs de !istas B poss=ve!
atribuir va!ores ;ue estão num arra& para vari>veis. VeMamos o e7emp!o:
47emp!o:
!ist'ia) ib) ic( W arra&'DaE) DbE) DcE(1
? comando acima atribui va!ores ]s trQs vari>veis simu!taneamente. Z bom notar ;ue sG são
atribu=dos ]s vari>veis da !ista os e!ementos do arra& ;ue possuem =ndices inteiros e não
negativos. +o e7emp!o acima as trQs atribuiç<es foram bem sucedidas por;ue ao inicia!iAar um
arra& sem especificar os =ndices e!es passam a ser inteiros) a partir do Aero. ,m fator importante
B ;ue cada vari>ve! da !ista possui um =ndice inteiro e ordina!) iniciando com Aero) ;ue serve para
determinar ;ua! va!or ser> atribu=do. +o e7emp!o anterior temos ia com =ndice %) ib com =ndice
0 e ic com =ndice $. VeMamos um outro e7emp!o:
iarr W arra&'0W\EumE)IW\EtresE)EaEW\E!etraAE)$W\Edois(1
!ist'ia)ib)ic)id( W iarr1
ApGs a e7ecução do cGdigo acima temos os seguintes va!ores:
ia WW nu!!
ib WW DumE
ic WW DdoisE
id WW DtresE
.evemos observar ;ue ] vari>ve! ia não foi atribu=do va!or) pois no arra& não e7iste e!emento
com =ndice % 'Aero(. ?utro deta!#e importante B ;ue o va!or DtresE foi atribu=do ] vari>ve! id) e
não a ib) pois seu =ndice B I) o mesmo ;ue id na !ista. Por fim) vemos ;ue o va!or D!etraAE não
foi atribu=do a e!emento a!gum da !ista pois seu =ndice não B inteiro.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 23
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
?s =ndices da !ista servem apenas como referQncia ao interpretador P3P para rea!iAar as
atribuiç<es) não podendo ser acessados de maneira a!guma pe!o programador. .e maneira
diferente do arra&) uma !ista não pode ser atribu=da a uma vari>ve!) servindo apenas para faAer
m@!tip!as atribuiç<es atravBs de um arra&.
+o apQndice %$ est> dispon=ve! uma !ista das funç<es mais comuns para o tratamento de arra&s.
+'Oetos
,m obMeto pode ser inicia!iAado uti!iAando o comando ne$ para instanciar uma c!asse para uma
vari>ve!.
47emp!o:
c!ass teste b
function nada'( b
ec#o DnadaE1
d
d
ivivas W new teste1
ivivas 6\ nada'(1
A uti!iAação de obMetos ser> mais deta!#ada mais ] frente.
Booleanos
P3P não possui um tipo boo!eano) mas B capaA de ava!iar e7press<es e retornar true ou alse)
atravBs do tipo integer: B usado o va!or % 'Aero( para representar o estado alse) e ;ua!;uer
va!or diferente de Aero 'gera!mente 0( para representar o estado true.
6ransformação de tipos
A transformação de tipos em P3P pode ser feita das seguintes maneiras:
CoerçLes
Huando ocorrem determinadas operaç<es 'DkE) por e7emp!o( entre dois va!ores de tipos
diferentes) o P3P converte o va!or de um de!es automaticamente 'coerção(. Z interessante notar
;ue se o operando for uma vari>ve!) seu va!or não ser> a!terado.
? tipo para o ;ua! os va!ores dos operandos serão convertidos B determinado da seguinte forma:
Se um dos operandos for f!oat) o outro ser> convertido para f!oat) senão) se um de!es for
integer) o outro ser> convertido para integer.
47emp!o:
ivivas W D0E1 ** ivivas B a string D0E
ivivas W ivivas k 01 ** ivivas B o integer $
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
ivivas W ivivas k I.O1 ** ivivas B o doub!e L.O
ivivas W 0 k 0.L ** ivivas B o doub!e $.L
Como podemos notar) o P3P converte string para integer ou doub!e mantendo o va!or. ?
sistema uti!iAado pe!o P3P para converter de strings para n@meros B o seguinte:
A. Z ana!isado o in=cio da string. Se contiver um n@mero) e!e ser> ava!iado. Senão) o va!or ser>
% 'Aero(1
8. ? n@mero pode conter um sina! no in=cio 'DkE ou D6D(1
C. Se a string contiver um ponto em sua parte numBrica a ser ana!isada) e!e ser> considerado) e
o va!or obtido ser> doub!e1
.. Se a string contiver um DeE ou D4E em sua parte numBrica a ser ana!isada) o va!or seguinte
ser> considerado como e7poente da base 0%) e o va!or obtido ser> doub!e1
47emp!os:
ivivas W 0 k D0%.LE1 ** ivivas WW 00.L
ivivas W 0 k D60.IeIE1 ** ivivas WW 60$JJ
ivivas W 0 k Dteste0%.LE1 ** ivivas WW 0
ivivas W 0 k D0%testesE1 ** ivivas WW 00
ivivas W 0 k : 0%testes:1 ** ivivas WW 00
ivivas W 0 k :k 0%testes:1 ** ivivas WW 0
6ransformação e>plHcita de tipos
A sinta7e do t!pecast de P3P B seme!#ante ao C: basta escrever o tipo entre parenteses
antes do va!or
47emp!o:
ivivas W 0L1 ** ivivas B integer '0L(
ivivas W 'doub!e( ivivas ** ivivas B doub!e '0L.%(
ivivas W I.J ** ivivas B doub!e 'I.J(
ivivas W 'int( ivivas ** ivivas B integer 'I(
** o va!or decima! B truncado
?s tipos de cast permitidos são:
'int() 'integer( l muda para integer1
'rea!() 'doub!e() 'f!oat( l muda para f!oat1
'string( l muda para string1
'arra&( l muda para arra&1
'obMect( l muda para obMeto.
Com a função sett;pe
A função sett&pe converte uma vari>ve! para o tipo especificado) ;ue pode ser DintegerE)
Ddoub!eE) DstringE) Darra&E ou DobMectE.
47emp!o:
ivivas W 0L1 ** ivivas B integer
sett&pe'ivivas)doub!e( ** ivivas B doub!e
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 25
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
#P% +peradores
Aritm-ticos
SG podem ser uti!iAados ;uando os operandos são n@meros 'integer ou f!oat(. Se forem de outro
tipo) terão seus va!ores convertidos antes da rea!iAação da operação.
k adição
6 subtração
Y mu!tip!icação
* divisão
h mGdu!o
de strin&s
SG #> um operador e7c!usivo para strings:
% concatenação
de atri'uição
47iste um operador b>sico de atribuição e diversos derivados. Sempre retornam o va!or
atribu=do. +o caso dos operadores derivados de atribuição) a operação B feita entre os dois
operandos) sendo atribu=do o resu!tado para o primeiro. A atribuição B sempre por va!or) e não
por referQncia.
W atribuição simp!es
kW atribuição com adição
6W atribuição com subtração
YW atribuição com mu!tip!icação
*W atribuição com divisão
hW atribuição com mGdu!o
.W atribuição com concatenação
47emp!o:
ia W O1
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 27
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
ia kW $1 ** ia passa a conter o va!or J
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
'it a 'it
Comparam dois n@meros bit a bit.
X DeE !Ggico
c DouE !Ggico
T ou e7c!usivo
m não 'inversão(
[[ s#ift !eft
\\ s#ift rig#t
0I&icos
,ti!iAados para inteiros representando va!ores boo!eanos
and DeE !Ggico
or DouE !Ggico
7or ou e7c!usivo
n não 'inversão(
XX DeE !Ggico
cc DouE !Ggico
47istem dois operadores para DeE e para Dou por;ue e!es tQm diferentes posiç<es na ordem de
precedQncia.
Comparação
As comparaç<es são feitas entre os va!ores contidos nas vari>veis) e não as referQncias. Sempre
retornam um va!or boo!eano.
WW igua! a
nW diferente de
[ menor ;ue
\ maior ;ue
[W menor ou igua! a
\W maior ou igua! a
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 29
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
E>pressão condicional
47iste um operador de se!eção ;ue B tern>rio. -unciona assim:
'e7pressao0(V'e7pressao$(:' e7pressaoI(
o interpretador P3P ava!ia a primeira e7pressão. Se e!a for verdadeira) a e7pressão retorna o
va!or de e7pressão$. Senão) retorna o va!or de e7pressãoI.
de incremento e decremento
kk incremento
66 decremento
Podem ser uti!iAados de duas formas: antes ou depois da vari>ve!. Huando uti!iAado antes)
retorna o va!or da vari>ve! antes de increment>6!a ou decrement>6!a. Huando uti!iAado depois)
retorna o va!or da vari>ve! M> incrementado ou decrementado.
47emp!os:
ia W ib W 0%1 ** ia e ib recebem o va!or 0%
ic W iakk1 ** ic recebe 0% e ia passa a ter 00
id W kkib1 ** id recebe 00) va!or de ib M> incrementado
#Q% Estruturas de Controle
As estruturas ;ue veremos a seguir são comuns para as !inguagens de programação imperativas)
bastando) portanto) descrever a sinta7e de cada uma de!as) resumindo o funcionamento.
Blocos
,m b!oco consiste de v>rios comandos agrupados com o obMetivo de re!acion>6!os com
determinado comando ou função. 4m comandos como if) for) w#i!e) switc# e em dec!araç<es de
funç<es b!ocos podem ser uti!iAados para permitir ;ue um comando faça parte do conte7to
deseMado. 8!ocos em P3P são de!imitados pe!os caracteres DbE e DdE. A uti!iAação dos
de!imitadores de b!oco em uma parte ;ua!;uer do cGdigo não re!acionada com os comandos
citados ou funç<es não produAir> efeito a!gum) e ser> tratada norma!mente pe!o interpretador.
47emp!o:
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
if 'i7 WW i&(
comando01
comando$1
Para ;ue comando$ esteMa re!acionado ao if B preciso uti!iAar um b!oco:
if 'i7 WW i&(b
comando01
comando$1
d
Comandos de seleção
2ambBm c#amados de condicionais) os comandos de se!eção permitem e7ecutar comandos ou
b!ocos de comandos com base em testes feitos durante a e7ecução.
if
? mais trivia! dos comandos condicionais B o if. 4!e testa a condição e e7ecuta o comando
indicado se o resu!tado for true 'va!or diferente de Aero(. 4!e possui duas sinta7es:
if 'e7pressão(
comando1
if 'e7pressão(:
comando1
. . .
comando1
endif1
Para inc!uir mais de um comando no if da primeira sinta7e) B preciso uti!iAar um b!oco)
demarcado por c#aves.
? e!se B um comp!emento opciona! para o if. Se uti!iAado) o comando ser> e7ecutado se a
e7pressão retornar o va!or fa!se 'Aero(. Suas duas sinta7es são:
if 'e7pressão(
comando1
e!se
comando1
if 'e7pressão(:
comando1
. . .
comando1
e!se
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 31
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
comando1
. . .
comando1
endif1
A seguir) temos um e7emp!o do comando if uti!iAado com e!se:
if 'ia \ ib(
imaior W ia1
e!se
imaior W ib1
? e7emp!o acima co!oca em imaior o maior va!or entre ia e ib
4m determinadas situaç<es B necess>rio faAer mais de um teste) e e7ecutar condiciona!mente
diversos comandos ou b!ocos de comandos. Para faci!itar o entendimento de uma estrutura do
tipo:
if 'e7pressao0(
comando01
e!se
if 'e7pressao$(
comando$1
e!se
if 'e7pressaoI(
comandoI1
e!se
comandoK1
foi criado o comando) tambBm opciona! e!seif. 4!e tem a mesma função de um e!se e um if
usados se;uencia!mente) como no e7emp!o acima. +um mesmo if podem ser uti!iAados diversos
e!seiffs) ficando essa uti!iAação a critBrio do programador) ;ue deve Ae!ar pe!a !egibi!idade de
seu script.
? comando e!seif tambBm pode ser uti!iAado com dois tipos de sinta7e. 4m resumo) a sinta7e
gera! do comando if fica das seguintes maneiras:
if 'e7pressao0(
comando1
a e!seif 'e7pressao$(
comando1 U
a e!se
comando1 U

if 'e7pressao0( :
comando1
. . .
comando1
a e!seif 'e7pressao$(
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
comando1
. . .
comando1 U
a e!se
comando1
. . .
comando1 U
endif1
switc!
? comando switc# atua de maneira seme!#ante a uma sBrie de comandos if na mesma
e7pressão. -re;uentemente o programador pode ;uerer comparar uma vari>ve! com diversos
va!ores) e e7ecutar um cGdigo diferente a depender de ;ua! va!or B igua! ao da vari>ve!.
Huando isso for necess>rio) deve6se usar o comando switc#. ? e7emp!o seguinte mostra dois
trec#os de cGdigo ;ue faAem a mesma coisa) sendo ;ue o primeiro uti!iAa uma sBrie de iffs e o
segundo uti!iAa switc#:
if 'ii WW %(
print Di B igua! a AeroE1
e!seif 'ii WW 0(
print Di B igua! a umE1
e!seif 'ii WW $(
print Di B igua! a doisE1
switc# 'ii( b
case %:
print Di B igua! a AeroE1
brea91
case 0:
print Di B igua! a umE1
brea91
case $:
print Di B igua! a doisE1
brea91
d
Z importante compreender o funcionamento do switc# para não cometer enganos. ? comando
switc# testa !in#a a !in#a os cases encontrados) e a partir do momento ;ue encontra um va!or
igua! ao da vari>ve! testada) passa a e7ecutar todos os comandos seguintes) mesmo os ;ue
faAem parte de outro teste) atB o fim do b!oco. por isso usa6se o comando brea9) ;uebrando o
f!u7o e faAendo com ;ue o cGdigo seMa e7ecutado da maneira deseMada. Veremos mais sobre o
brea9 mais adiante. VeMa o e7emp!o:
switc# 'ii( b
case %:
print Di B igua! a AeroE1
case 0:
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 33
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
print Di B igua! a umE1
case $:
print Di B igua! a doisE1
d
+o e7emp!o acima) se ii for igua! a Aero) os trQs comandos DprintE serão e7ecutados. Se ii for
igua! a 0) os dois @!timos DprintE serão e7ecutados. ? comando sG funcionar> da maneira
deseMada se ii for igua! a $.
4m outras !inguagens ;ue imp!ementam o comando switc#) ou simi!ar) os va!ores a serem
testados sG podem ser do tipo inteiro. 4m P3P B permitido usar va!ores do tipo string como
e!ementos de teste do comando switc#. ? e7emp!o abai7o funciona perfeitamente:
switc# 'is( b
case DcasaE:
print DA casa B amare!aE1
case DarvoreE:
print Da >rvore B bonitaE1
case D!ampadaE:
print DMoao apagou a !ampadaE1
d
comandos de repetição
w!ile
? w#i!e B o comando de repetição '!aço( mais simp!es. 4!e testa uma condição e e7ecuta um
comando) ou um b!oco de comandos) atB ;ue a condição testada seMa fa!sa. Assim como o if) o
w#i!e tambBm possui duas sinta7es a!ternativas:
w!ile '[e7pressao\(
[comando\1
w!ile '[e7pressao\(:
[comando\1
. . .
[comando\1
endw!ileR
A e7pressão sG B testada a cada veA ;ue o b!oco de instruç<es termina) a!Bm do teste inicia!. Se
o va!or da e7pressão passar a ser fa!se no meio do b!oco de instruç<es) a e7ecução segue atB o
fina! do b!oco. Se no teste inicia! a condição for ava!iada como fa!se) o b!oco de comandos não
ser> e7ecutado.
? e7emp!o a seguir mostra o uso do w#i!e para imprimir os n@meros de 0 a 0%:
ii W 01
w#i!e 'ii [W0%(
print iikk1

“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
do%%% w!ile
? !aço do..w#i!e funciona de maneira bastante seme!#ante ao w#i!e) com a simp!es diferença
;ue a e7pressão B testada ao fina! do b!oco de comandos. ? !aço do..w#i!e possui apenas uma
sinta7e) ;ue B a seguinte:
do b
[comando\
. . .
[comando\
d w!ile '[e7pressao\(1
? e7emp!o uti!iAado para i!ustrar o uso do w#i!e pode ser feito da seguinte maneira uti!iAando o
do.. w#i!e:
ii W %1
do b
print kkii1
d w#i!e 'ii [ 0%(1
for
? tipo de !aço mais comp!e7o B o for. Para os ;ue programam em C) Ckk ou "ava) a assimi!ação
do funcionamento do for B natura!. Mas para a;ue!es ;ue estão acostumados a !inguagens como
Pasca!) #> uma grande mudança para o uso do for. As duas sinta7es permitidas são:
for '[inicia!iAacao\1[condicao\1[incremento\(
[comando\1
for '[inicia!iAacao\1[condicao\1[incremento\( :
[comando\1
. . .
[comando\1
endfor1
As trQs e7press<es ;ue ficam entre parQnteses tQm as seguintes fina!idades:
Iniciali8ação: comando ou se;uencia de comandos a serem rea!iAados antes do inicio do !aço.
Serve para inicia!iAar vari>veis.
Condição: 47pressão boo!eana ;ue define se os comandos ;ue estão dentro do !aço serão
e7ecutados ou não. 4n;uanto a e7pressão for verdadeira 'va!or diferente de Aero( os comandos
serão e7ecutados.
Incremento: Comando e7ecutado ao fina! de cada e7ecução do !aço.
,m comando for funciona de maneira seme!#ante a um w#i!e escrito da seguinte forma:
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 35
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
[inicia!iAacao\
w!ile '[condicao\( b
comandos
...
[incremento\
d
Cue'ra de flu>o
Brea4
? comando brea9 pode ser uti!iAado em !aços de do) for e w#i!e) a!Bm do uso M> visto no
comando switc#. Ao encontrar um brea9 dentro de um desses !aços) o interpretador P3P para
imediatamente a e7ecução do !aço) seguindo norma!mente o f!u7o do script.
w!ile 'i7 \ %( b
...
if 'i7 WW $%( b
ec#o Derron 7 W $%E1
brea91
...
d
+o trec#o de cGdigo acima) o !aço w#i!e tem uma condição para seu tBrmino norma! 'i7 [W %()
mas foi uti!iAado o brea9 para o caso de um tBrmino não previsto no in=cio do !aço. Assim o
interpretador seguir> para o comando seguinte ao !aço.
Continue
? comando continue tambBm deve ser uti!iAado no interior de !aços) e funciona de maneira
seme!#ante ao brea9) com a diferença ;ue o f!u7o ao invBs de sair do !aço vo!ta para o in=cio
de!e. VeMamos o e7emp!o:
for 'ii W %1 ii [ 0%%1 iikk( b
if 'ii h $( continue1
ec#o D ii D1
d
? e7emp!o acima B uma maneira ineficiente de imprimir os n@meros pares entre % e JJ. ? ;ue o
!aço faA B testar se o resto da divisão entre o n@mero e $ B %. Se for diferente de Aero 'va!or
!Ggico true( o interpretador encontrar> um continue) ;ue faA com ;ue os comandos seguintes
do interior do !aço seMam ignorados) seguindo para a prG7ima iteração.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
*#% 2unçLes
5efinindo funçLes
A sinta7e b>sica para definir uma função B:
function nomeSdaSfunção'aarg0) arg$) argIU( b
Comandos1
... 1
areturn [va!or de retorno\U1
d
Hua!;uer cGdigo P3P v>!ido pode estar contido no interior de uma função. Como a c#ecagem de
tipos em P3P B dinCmica) o tipo de retorno não deve ser dec!arado) sendo necess>rio ;ue o
programador esteMa atento para ;ue a função retorne o tipo deseMado. Z recomend>ve! ;ue esteMa
tudo bem documentado para faci!itar a !eitura e compreensão do cGdigo. Para efeito de
documentação) uti!iAa6se o seguinte formato de dec!aração de função:
tipo function nome_da_funcao'tipo arg0) tipo arg$) ...(1
4ste formato sG deve ser uti!iAado na documentação do script) pois o P3P não aceita a
dec!aração de tipos. Isso significa ;ue em muitos casos o programador deve estar atento ao tipos
dos va!ores passados como parCmetros) pois se não for passado o tipo esperado não B emitido
nen#um a!erta pe!o interpretador P3P) M> ;ue este não testa os tipos.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 37
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Aalor de retorno
2oda função pode opciona!mente retornar um va!or) ou simp!esmente e7ecutar os comandos e
não retornar va!or a!gum.
+ão B poss=ve! ;ue uma função retorne mais de um va!or) mas B permitido faAer com ;ue uma
função retorne um va!or composto) como !istas ou arra&s.
Ar&umentos
Z poss=ve! passar argumentos para uma função. 4!es devem ser dec!arados !ogo apGs o nome da
função) entre parQnteses) e tornam6se vari>veis pertencentes ao escopo !oca! da função. A
dec!aração do tipo de cada argumento tambBm B uti!iAada apenas para efeito de documentação.
47emp!o:
function imprime'ite7to(b
ec#o ite7to1
d
imprime'Dteste de funç<esE(1
Passa&em de par?metros por referência
+orma!mente) a passagem de parCmetros em P3P B feita por va!or) ou seMa) se o conte@do da
vari>ve! for a!terado) essa a!teração não afeta a vari>ve! origina!.
47emp!o:
function maisF'inumero( b
inumero kW L1
d
ia W I1
maisL'ia(1 **ia continua va!endo I
+o e7emp!o acima) como a passagem de parCmetros B por va!or) a função maisL B in@ti!) M> ;ue
apGs a e7ecução sair da função o va!or anterior da vari>ve! B recuperado. Se a passagem de
va!or fosse feita por referQncia) a vari>ve! ia teria R como va!or. ? ;ue ocorre norma!mente B
;ue ao ser c#amada uma função) o interpretador sa!va todo o escopo atua!) ou seMa) os
conte@dos das vari>veis. Se uma dessas vari>veis for passada como parCmetro) seu conte@do
fica preservado) pois a função ir> traba!#ar na verdade com uma cGpia da vari>ve!. PorBm) se a
passagem de parCmetros for feita por referQncia) toda a!teração ;ue a função rea!iAar no va!or
passado como parCmetro afetar> a vari>ve! ;ue o contBm.
3> duas maneiras de faAer com ;ue uma função ten#a parCmetros passados por referQncia:
indicando isso na dec!aração da função) o ;ue faA com ;ue a pasagem de parCmetros sempre
seMa assim1 e tambBm na prGpria c#amada da função. +os dois casos uti!iAa6se o modificador DXE.
VeMamos um e7emp!o ;ue i!ustra os dois casos:
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 39
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
function maisF'Xinum0) inum$( b
inum0 kW L1
inum$ kW L1
d
ia W ib W 01
maisL'ia) ib(1 *Y +este caso) sG inum0 ter> seu va!or a!terado) pois a passagem
por referQncia est> definida na dec!aração da função. Y*
maisL'ia) Xib(1 *Y A;ui as duas vari>veis terão seus va!ores a!terados. Y*
Ar&umentos com valores pr-$definidos GdefaultJ
4m P3P B poss=ve! ter va!ores deault para argumentos de funç<es) ou seMa) va!ores ;ue serão
assumidos em caso de nada ser passado no !ugar do argumento. Huando a!gum parCmetro B
dec!arado desta maneira) a passagem do mesmo na c#amada da função torna6se opciona!.
function teste'ivivas W DtestandoE( b
ec#o ivivas1
d
teste'(1 ** imprime DtestandoE
teste'Doutro testeE(1 ** imprime Doutro testeE
Z bom !embrar ;ue ;uando a função tem mais de um parCmetro) o ;ue tem va!or deault deve
ser dec!arado por @!timo:
function teste'ifigura W circu!o) icor( b
ec#o Da figura B um D) ifigura) D de cor D icor1
d
teste'aAu!(1
*Y A função não vai funcionar da maneira esperada) ocorrendo um erro no
interpretador. A dec!aração correta B: Y*
function teste$'icor) ifigura W circu!o( b
ec#o Da figura B um D) ifigura) D de cor D icor1
d
teste$'aAu!(1
*Y A;ui a funcao funciona da maneira esperada) ou seMa) imprime o te7to: Da
figura B um c=rcu!o de cor aAu!E Y*
Conte>to
? conte7to B o conMunto de vari>veis e seus respectivos va!ores num determinado ponto do
programa. +a c#amada de uma função) ao iniciar a e7ecução do b!oco ;ue contBm a
imp!ementação da mesma B criado um novo conte7to) contendo as vari>veis dec!aradas dentro
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
do b!oco) ou seMa) todas as vari>veis uti!iAadas dentro da;ue!e b!oco serão e!iminadas ao tBrmino
da e7ecução da função.
Escopo
? escopo de uma vari>ve! em P3P define a porção do programa onde e!a pode ser uti!iAada. +a
maioria dos casos todas as vari>veis tQm escopo g!oba!. 4ntretanto) em funç<es definidas pe!o
usu>rio um escopo !oca! B criado. ,ma vari>ve! de escopo g!oba! não pode ser uti!iAada no
interior de uma função sem ;ue #aMa uma dec!aração.
47emp!o:
ivivas W D2estandoE1
function 2este'( b
ec#o ivivas1
d
2este'(1
? trec#o acima não produAir> sa=da a!guma) pois a vari>ve! ivivas B de escopo g!oba!) e não
pode ser referida num escopo !oca!) mesmo ;ue não #aMa outra com nome igua! ;ue cubra a sua
visibi!idade. Para ;ue o script funcione da forma deseMada) a vari>ve! g!oba! a ser uti!iAada deve
ser dec!arada.
47emp!o:
ivivas W D2estandoE1
function 2este'( b
g!oba! ivivas1
ec#o ivivas1
d
2este'(1
,ma dec!aração Dg!oba!E pode conter v>rias vari>veis) separadas por v=rgu!as. ,ma outra
maneira de acessar vari>veis de escopo g!oba! dentro de uma função B uti!iAando um arra& prB6
definido pe!o P3P cuMo nome B i/?8A/S. ? =ndice para a vari>ve! referida B o proprio nome da
vari>ve!) sem o caracter i. ? e7emp!o acima e o abai7o produAem o mesmo resu!tado:
47emp!o:
ivivas W :2estando:1
function 2este'( b
ec#o i/?8A/Sa:vivas:U1 ** imprime ivivas
ec#o ivivas1 ** não imprime nada
d
2este'(1
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 41
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
**% Aari)veis e Constantes
5eclaração de uma vari)vel
Como a tipagem em P3P B dinCmica) as vari>veis não precisam ser dec!aradas. ,ma vari>ve! B
inicia!iAada no momento em ;ue B feita a primeira atribuição. ? tipo da vari>ve! ser> definido de
acordo com o va!or atribu=do.
+ modificador static
,ma vari>ve! est>tica B vis=ve! num escopo !oca!) mas e!a B inicia!iAada apenas uma veA e seu
va!or não B perdido ;uando a e7ecução do script dei7a esse escopo. VeMa o seguinte e7emp!o:
function 2este'( b
ia W %1
ec#o ia1
iakk1
d
? @!timo comando da função B in@ti!) pois assim ;ue for encerrada a e7ecução da função a
vari>ve! ia perde seu va!or. "> no e7emp!o seguinte) a cada c#amada da função a vari>ve! ia
ter> seu va!or impresso e ser> incrementada:
function 2este'( b
static ia W %1
ec#o ia1
iakk1
d
? modificador static B muito uti!iAado em funç<es recursivas) M> ;ue o va!or de a!gumas vari>veis
precisa ser mantido. 4!e funciona da seguinte forma: ? va!or das vari>veis dec!aradas como
est>ticas B mantido ao terminar a e7ecução da função. +a prG7ima e7ecução da função) ao
encontrar novamente a dec!aração com static) o va!or da vari>ve! B recuperado.
4m outras pa!avras) uma vari>ve! dec!arada como static tem o mesmo Dtempo de vidaE ;ue uma
vari>ve! g!oba!) porBm sua visibi!idade B restrita ao escopo !oca! em ;ue foi dec!arada e sG B
recuperada apGs a dec!aração.
47emp!o:
function 2este'( b
ec#o :ia:1
static ia W %1
iakk1
d
? e7emp!o acima não produAir> sa=da a!guma. +a primeira e7ecução da função) a impressão
ocorre antes da atribuição de um va!or ] função) e portanto o conte@do de ia B nu!o 'string
vaAia(. +as e7ecuç<es seguintes da função 2este'( a impressão ocorre antes da recuperação do
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
va!or de ia) e portanto nesse momento seu va!or ainda B nu!o. Para ;ue a função retorne a!gum
va!or o modificador static deve ser uti!iAado.
Aari)veis Aari)veis
? P3P tem um recurso con#ecido como vari>veis vari>veis) ;ue consiste em vari>veis cuMos
nomes tambBm são vari>veis. Sua uti!iAação B feita atravBs do dup!o cifrão 'ii(.
ia W DtesteE1
iia W DMauricio VivasE1
? e7emp!o acima e e;uiva!ente ao seguinte:
ia W DtesteE1
iteste W DMauricio VivasE1
Aari)veis enviadas pelo nave&ador
Para interagir com a navegação feita pe!o usu>rio) B necess>rio ;ue o P3P possa enviar e receber
informaç<es para o software de navegação. A maneira de enviar informaç<es) como M> foi visto
anteriormente) gera!mente B atravBs de um comando de impressão) como o echo. Para receber
informaç<es vindas do navegador atravBs de um link ou um formu!>rio #tm! o P3P uti!iAa as
informaç<es enviadas atravBs da ,5/.
Por e7emp!o: se seu script p#p est> !oca!iAado em D#ttp:**!oca!#ost*teste.p#pIE e vocQ o
c#ama com a ur! #ttp:**!oca!#ost*teste.p#pIVvivasWtesteE) automaticamente o P3P criar>
uma vari>ve! com o nome ivivas contendo a string DtesteE. +ote ;ue o conte@do da vari>ve! est>
no formato ur!encode. ?s formu!>rios #tm! M> enviam informaç<es automaticamente nesse
formato) e o P3P decodifica sem necessitar de tratamento pe!o programador.
7/0encode
? formato ur!encode B obtido substituindo os espaços pe!o caracter DkE e todos os outros
caracteres não a!fa6numBricos 'com e7ceção de D_E( pe!o caracter DhE seguido do cGdigo ASCII
em #e7adecima!.
Por e7emp!o: o te7to D2estando 0 $ I nnE em ur!encode fica D2estandok0k$kIkh$0h$0E
? P3P possui duas funç<es para tratar com te7to em ur!encode. Seguem suas sinta7es:
string urlencode'string te7to(1
string urldecode'string te7to(1
4ssas funç<es servem respectivamente para codificar ou decodificar um te7to
passado como argumento. Para entender me!#or o ;ue B um argumento e como
funciona uma função) !eia o tGpico Dfunç<esE.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 43
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
7tili8ando arra;s
Cada e!emento de um formu!>rio 32M/ submetido a um script P3P cria no ambiente do mesmo
uma vari>ve! cuMo nome B o mesmo nome do e!emento. Por e7emp!o: um campo definido como:
[input t&peWEte7tE nameWEenderecoE\
ao ser submetido a um script P3P far> com ;ue seMa criada uma vari>ve! com o nome
iendereco. Isto acontece de forma seme!#ante para coo9ies) como veremos mais adiante.
,ma boa tBcnica de programação B uti!iAar a notação de arra&s para nomes de coo9ies ou itens
de um formu!>rio #tm!. Para um conMunto de c#ec9bo7es) por e7emp!o) podemos uti!iAar a
seguinte notação:
[input t&peW:c#ec9bo7: nameW:testeaU: va!ueW:va!or0:\opcao0
[input t&peW:c#ec9bo7: nameW:testeaU: va!ueW:va!or$:\opcao$
[input t&peW:c#ec9bo7: nameW:testeaU: va!ueW:va!orI:\opcaoI
[input t&peW:c#ec9bo7: nameW:testeaU: va!ueW:va!orK:\opcaoK
[input t&peW:c#ec9bo7: nameW:testeaU: va!ueW:va!orL:\opcaoL
Ao submeter o formu!>rio) o script ;ue recebe os va!ores submetidos ter> uma vari>ve! c#amada
iteste contendo os va!ores marcados num arra&) com =ndices a partir de Aero. Assim) se forem
marcadas as opçoes $) I e L) poderemos faAer as seguintes afirmaç<es:
iteste WW arra&'Dva!or$E) Dva!orIE) va!orLE(1
itestea%U WW Dva!or$1
itestea0U WW Dva!orI1
itestea$U WW Dva!orL1
? mesmo artif=cio pode ser uti!iAado com outros e!ementos de formu!>rios e atB com coo9ies.
Aari)veis de am'iente
? P3P possui diversas vari>veis de ambiente) como a iP3P_S4/-) por e7emp!o) ;ue contBm o
nome e o pat# do prGprio ar;uivo. A!gumas outras contBm informaç<es sobre o navegador do
usu>rio) o servidor #ttp) a versão do P3P e diversas informaç<es. Para ter uma !istagem de todas
as vari>veis e constantes de ambiente e seus respectivos conte@dos) deve6se uti!iAar a função
p#pinfo'(.
Aerificando o tipo de uma vari)vel
Por causa da tipagem dinCmica uti!iAada pe!o P3P) nem sempre B poss=ve! saber ;ua! o tipo de
uma vari>ve! em determinado instantese não contar com a aMuda de a!gumas funç<es ;ue
aMudam a verificar isso. A verificação pode ser feita de duas maneiras:
2unção ,ue retorna o tipo da vari)vel
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
4sta função B a gett&pe. Sua assinatura B a seguinte:
string &ett;pe'mi7ed var(1
A pa!avra Dmi>edE indica ;ue a vari>ve! var pode ser de diversos tipos.
A função &ett;pe pode retornar as seguintes strings: DintegerE) Ddoub!eE) DstringE) Darra&E)
DobMectE e un9nown t&peE.
2unçLes ,ue testam o tipo da vari)vel
São as funç<es is_int) is_integer) is_rea!) is_!ong) is_f!oat) is_string) is_arra& e is_obMect.
2odas tQm o mesmo formato) seguindo mode!o da assinatura a seguir:
int isSinte&er'mi7ed var(1
2odas essas funç<es retornam true se a vari>ve! for da;ue!e tipo) e fa!se em caso contr>rio.
5estruindo uma vari)vel
Z poss=ve! desa!ocar uma vari>ve! se e!a não for usada posteriormente atravBs da função unset)
;ue tem a seguinte assinatura:
int unset'mi7ed var(1
A função destrGi a vari>ve!) ou seMa) !ibera a memGria ocupada por e!a) faAendo com ;ue e!a
dei7e de e7istir. Se mais na frente for feita uma c#amada > vari>ve!) ser> criada uma nova
vari>ve! de mesmo nome e de conte@do vaAio) a não ser ;ue a c#amada seMa pe!a função isset.
Se a operação for bem sucedida) retorna true.
Aerificando se uma vari)vel possui um
valor
47istem dois tipos de teste ;ue podem ser feitos para verificar se uma vari>ve! est> setada: com
a função isset e com a função empt&.
A função isset
Possui o seguinte protGtipo:
int isset'mi7ed var(1
4 retorna true se a vari>ve! estiver setada 'ainda ;ue com uma string vaAia ou o va!or Aero() e
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 45
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
fa!se em caso contr>rio.
A função empt;
Possui a seguinte assinatura:
int empt;'mi7ed var(1
4 retorna true se a vari>ve! não contiver um va!or 'não estiver setada( ou possuir va!or % 'Aero(
ou uma string vaAia. Caso contr>rio) retorna fa!se.
Constantes pr-$definidas
? P3P possui a!gumas constantes prB6definidas) indicando a versão do P3P) o Sistema
?peraciona! do servidor) o ar;uivo em e7ecução) e diversas outras informaç<es. Para ter acesso
a todas as constantes prB6definidas) pode6se uti!iAar a função p#pinfo'() ;ue e7ibe uma tabe!a
contendo todas as constantes prB6definidas) assim como configuraç<es da m>;uina) sistema
operaciona!) servidor #ttp e versão do P3P insta!ada.
5efinindo constantes
Para definir constantes uti!iAa6se a função define. ,ma veA definido) o va!or de uma constante
não poder> mais ser a!terado. ,ma constante sG pode conter va!ores esca!ares) ou seMa) não
pode conter nem um arra& nem um obMeto. A assinatura da função define B a seguinte:
int define'string nome_da_constante) mi7ed va!or(1
A função retorna true se for bem6sucedida. VeMa um e7emp!o de sua uti!iAação a seguir:
define ':pi:) I.0K0LJ$NLIN(1
icircunf W $YpiYiraio1
*"% Classes e +'Oetos
Classe
,ma c!asse B um conMunto de vari>veis e funç<es re!acionadas a essas vari>veis. ,ma vantagem
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
da uti!iAação de programação orientada a obMetos B poder usufruir do recurso de encapsu!amento
de informação. Com o encapsu!amento o usu>rio de uma c!asse não precisa saber como e!a B
imp!ementada) bastando para a uti!iAação con#ecer a interface) ou seMa) as funç<es dispon=veis.
,ma c!asse B um tipo) e portanto não pode ser atribu=da a uma vari>ve!. Para definir uma c!asse)
deve6se uti!iAar a seguinte sinta7e:
c!ass +ome_da_c!asse b
var ivariave!01
var ivariave!$1
function funcao0 'iparametro( b
*Y WWW corpo da função WWW Y*
d
d
+'Oeto
Como foi dito anteriormente) c!asses são tipos) e não podem ser atribu=das a vari>veis. Vari>veis
do tipo de uma c!asse são c#amadas de obMetos) e devem ser criadas uti!iAando o operador new)
seguindo o e7emp!o abai7o:
ivariave! W new inome_da_c!asse1
Para uti!iAar as funç<es definidas na c!asse) deve ser uti!iAado o operador D6\E) como no
e7emp!o:
ivariave!6\funcao0'
A vari)vel Tt!is
+a definição de uma c!asse) pode6se uti!iAar a vari>ve! it#is) ;ue B o prGprio obMeto. Assim)
;uando uma c!asse B instanciada em um obMeto) e uma função desse obMeto na definição da
c!asse uti!iAa a vari>ve! it#is) essa vari>ve! significa o obMeto ;ue estamos uti!iAando.
Como e7emp!o da uti!iAação de c!asses e obMetos) podemos uti!iAar a c!asse conta) ;ue define
uma conta banc>ria bastante simp!es) com funç<es para ver sa!do e faAer um crBdito.
c!ass conta b
var isa!do1
function sa!do'( b
return it#is6\sa!do1
d
function credito'iva!or( b
it#is6\sa!do kW iva!or1
d
d
imin#aconta W new conta1
imin#aconta6\sa!do'(1 ** a variave! interna não foi
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 47
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
** inicia!iAada) e não contBm
** va!or a!gum
imin#aconta6\credito'L%(1
imin#aconta6\sa!do'(1 ** retorna L%
Su'Classes
,ma c!asse pode ser uma e7tensão de outra. Isso significa ;ue e!a #erdar> todas as vari>veis e
funç<es da outra c!asse) e ainda ter> as ;ue forem adicionadas pe!o programador. 4m P3P não B
permitido uti!iAar #erança m@!tip!a) ou seMa) uma c!asse pode ser e7tensão de apenas uma
outra.Para criar uma c!asse e7tendida) ou derivada de outra) deve ser uti!iAada a pa!avra
reservada e7tends) como pode ser visto no e7emp!o seguinte:
c!ass novaconta e7tends conta b
var inum1
function numero'( b
return it#is6\num1
d
d
A c!asse acima B derivada da c!asse conta) tendo as mesmas funç<es e vari>veis) com a adição
da vari>ve! inumero e a função numero'(.
Construtores
,m construtor B uma função definida na c!asse ;ue B automaticamente c#amada no momento
em ;ue a c!asse B instanciada 'atravBs do operador new(. ? construtor deve ter o mesmo nome
;ue a c!asse a ;ue pertence. VeMa o e7emp!o:
c!ass conta b
var isa!do1
function conta '( b
it#is.sa!do W %1
d
function sa!do'( b
return it#is6\sa!do1
d
function credito'iva!or( b
it#is6\sa!do kW iva!or1
d
d
Podemos perceber ;ue a c!asse conta agora possui um construtor) ;ue inicia!iAa a vari>ve!
isa!do com o va!or %.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
,m construtor pode conter argumentos) ;ue são opcionais) o ;ue torna esta ferramenta mais
poderosa. +o e7emp!o acima) o construtor da c!asse conta pode receber como argumento um
va!or) ;ue seria o va!or inicia! da conta.
Va!e observar ;ue para c!asses derivadas) o construtor da c!asse pai não B automaticamente
#erdado ;uando o construtor da c!asse derivada B c#amado.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 49
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
*9% DoçLes de SC0
Introdução
Huando os 8ancos de .ados 5e!acionais estavam sendo desenvo!vidos) foram criadas !inguagens
destinadas ] sua manipu!ação. ? .epartamento de Pes;uisas da I8M) desenvo!veu a SH/ como
forma de interface para o sistema de 8. re!aciona! denominado SeS24M 5) in=cio dos anos O%.
4m 0JRN o American +ationa! Standard Institute ' A+SI () pub!icou um padrão SH/.
A SH/ estabe!eceu6se como !inguagem padrão de 8anco de .ados 5e!aciona!.
SH/ apresenta uma sBrie de comandos ;ue permitem a definição dos dados) c#amada de ../
'.ata .efinition /anguage() composta entre outros pe!os comandos Create) ;ue B destinado a
criação do 8anco de .ados) das 2abe!as ;ue o comp<e) a!Bm das re!aç<es e7istentes entre as
tabe!as. Como e7emp!o de comandos da c!asse ../ temos os comandos Create) A!ter e .rop.
?s comandos da sBrie .M/ '.ata Manipu!ation /anguage() destinados a consu!tas) inserç<es)
e7c!us<es e a!teraç<es em um ou mais registros de uma ou mais tabe!as de maneira simu!tCnea.
Como e7emp!o de comandos da c!asse .M/ temos os comandos Se!ect) Insert) ,pdate e .e!ete.
,ma subc!asse de comandos .M/) a .C/ '.ata Contro! /anguage() disp<e de comandos de
contro!e como rant e 5evo9e.
A /inguagem SH/ tem como grandes virtudes sua capacidade de gerenciar =ndices) sem a
necessidade de contro!e individua!iAado de =ndice corrente) a!go muito comum nas !inguagens de
manipu!ação de dados do tipo registro a registro. ?utra caracter=stica muito importante
dispon=ve! em SH/ B sua capacidade de construção de vis<es) ;ue são formas de visua!iAarmos
os dados na forma de !istagens independente das tabe!as e organiAação !Ggica dos dados.
?utra caracter=stica interessante na !inguagem SH/ B a capacidade ;ue dispomos de cance!ar
uma sBrie de atua!iAaç<es ou de as gravarmos) depois de iniciarmos uma se;oQncia de
atua!iAaç<es. ?s comandos Commit e 5o!!bac9 são respons>veis por estas faci!idades.
.evemos notar ;ue a !inguagem SH/ consegue imp!ementar estas so!uç<es) somente pe!o fato
de estar baseada em 8anco de .ados) ;ue garantem por si mesmo a integridade das re!aç<es
e7istentes entre as tabe!as e seus =ndices.
Estrutura das ta'elas
C./012. C34054
4ste comando permite a criação de tabe!as no banco de dados ou mesmo de sua criação.
Sinta7e:
C54A24 .A2A8AS4 [ nome_db \1
onde:
nomeSd' 6 indica o nome do 8anco de .ados a ser criado.
Sinta7e:
C54A24 2A8/4 [ nome_tabe!a \ '
nome_atributo0 [ tipo \ a +?2 +,// U)
nome_atributo$ [ tipo \ a +?2 +,// U)
......
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
nome_atributo+ [ tipo \ a +?2 +,// U
( 1
onde:
nomeSta'le 6 indica o nome da tabe!a a ser criada.
nomeSatri'uto 6 indica o nome do campo a ser criado na tabe!a.
tipo 6 indica a definição do tipo de atributo ' integer'n() c#ar'n() ... (.
Comando 5rop
4ste comando e!imina a definição da tabe!a) seus dados e referQncias.
Sinta7e:
.5?P 2A8/4 [ nome_tabe!a \ 1
Comando Alter
4ste comando permite inserir*e!iminar atributos nas tabe!as M> e7istentes.
Comando:
A/245 2A8/4 [ nome_tabe!a \ A.. * .5?P '
nome_atributo0 [ tipo \ a +?2 +,// U)
nome_atributo+ [ tipo \ a +?2 +,// U
( 1
:anipulando dados das ta'elas
Comando SE0EC6
Permite recuperar informaç<es e7istentes nas tabe!as.
Sinta7e b>sica:
S4/4C2 a.IS2I+C2U e7pressao aAS nom6atributoU
a-5?M from6!istU
aF3454 condicaoU
a?5.45 8e attr_name0 aASC c .4SC UU
onde:
5IS6IDC6 : Para e!iminar !in#as dup!icadas na sa=da.
E>pressao: .efine os dados ;ue ;ueremos na sa=da) norma!mente uma ou mais co!unas de
uma tabe!a da !ista -5?M.
AS nom$atri'uto : um alias para o nome da co!una) e7emp!o:
2/+: : !ista das tabe!as na entrada
WHE/E : critBrios da se!eção
+/5E/ BE : CritBrio de ordenação das tabe!as de sa=da. ASC ordem ascendente) .4SC ordem
descendente
47emp!o:
S4/4C2 cidade) estado from brasi! w#ere popu!acao \ 0%%%%%1
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 51
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comando IDSE/6
Adiciona um ou v>rios registros a uma tabe!a. Isto B referido como consu!ta ane7ação.
Sinta7e b>sica
I+S452 I+2? destino a'campo0a) campo$a) ...UU(U
VA/,4S 'va!or0a) va!or$a) ...U(
A instrução I+S452 I+2? tem as partes abai7o:
5estino6 ? nome da tabe!a ou consu!ta em ;ue os registros devem ser ane7ados.
campo*U campo" 6 ?s nomes dos campos aos ;uais os dados devem ser ane7ados
valor*U valor" 6 ?s va!ores para inserir em campos espec=ficos do novo registro. Cada va!or B
inserido no campo ;ue corresponde ] posição do va!or na !ista: Va!or0 B inserido no campo0 do
novo registro) va!or$ no campo$ e assim por diante. VocQ deve separar os va!ores com uma
v=rgu!a e co!ocar os campos de te7tos entre aspas ': :(.
Comando 7P5A6E
Cria uma consu!ta atua!iAação ;ue a!tera os va!ores dos campos em uma tabe!a especificada com
base em critBrios espec=ficos.
Sinta7e:
,P.A24 tabe!a
S42 campo0 W va!ornovo) ...
F3454 critBrio1
?nde:
6a'ela 6 ? nome da tabe!a cuMos os dados vocQ ;uer modificar.
Aalornovo 6 ,ma e7pressão ;ue determina o va!or a ser inserido em um campo espec=fico nos
registros atua!iAados.
crit-rio 6 ,ma e7pressão ;ue determina ;uais registros devem ser atua!iAados. SG os registros
;ue satisfaAem a e7pressão são atua!iAados.
7P5A6E B especia!mente @ti! ;uando vocQ ;uer a!terar muitos registros ou ;uando os
registros ;ue vocQ ;uer a!terar estão em v>rias tabe!as. VocQ pode a!terar v>rios campos ao
mesmo tempo.
7P5A6E não gera um conMunto de resu!tados. Se vocQ ;uiser saber ;uais resu!tados
serão a!terados) e7amine primeiro os resu!tados da consu!ta se!eção ;ue use os mesmos critBrios
e então e7ecute a consu!ta atua!iAação.
Comando 5E0E6E
5emove registros de uma ou mais tabe!as !istadas na c!>usu!a -5?M ;ue satisfaA a c!>usu!a
F3454.
Sinta7e
.4/424 atabe!a.YU
-5?M tabe!a
F3454 critBrio
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
onde:
ta'ela%V 6 ? nome opciona! da tabe!a da ;ua! os registros são e7c!u=dos.
ta'ela 6 ? nome da tabe!a da ;ua! os registros são e7c!u=dos.
crit-rio 6 ,ma e7pressão ;ue determina ;ua! registro deve ser e7c!u=do.
5E0E6E B especia!mente @ti! ;uando vocQ ;uer e7c!uir muitos registros. Para e!iminar
uma tabe!a inteira do banco de dados) vocQ pode usar o mBtodo 47ecute com uma instrução
.5?P.
4ntretanto) se vocQ e!iminar a tabe!a) a estrutura B perdida. Por outro !ado) ;uando vocQ usa
.4/424) apenas os dados são e7c!u=dos. A estrutura da tabe!a e todas as propriedades da tabe!a)
como atributos de campo e =ndices) permanecem intactos.
VocQ pode usar 5E0E6E para remover registros de tabe!as ;ue estão em uma re!ação um por
v>rios com outras tabe!as. ?peraç<es de e7c!usão em cascata faAem com ;ue os registros das
tabe!as ;ue estão no !ado :v>rios: da re!ação seMam e7c!u=dos ;uando os registros
correspondentes do !ado :um: da re!ação são e7c!u=dos na consu!ta. Por e7emp!o) nas re!aç<es
entre as tabe!as C!ientes e Pedidos) a tabe!a C!ientes est> do !ado :um: e a tabe!a Pedidos est>
no !ado :v>rios: da re!ação. 47c!uir um registro em C!ientes faA com ;ue os registros
correspondentes em Pedidos seMam e7c!u=dos se a opção de e7c!usão em cascata for
especificada.
? 5E0E6E e7c!ui registros inteiros e não apenas dados em campos espec=ficos. Se vocQ ;uiser
e7c!uir va!ores de um campo espec=fico) crie uma consu!ta atua!iAação ;ue mude os va!ores para
+u!!.
ApGs remover os registros usando uma consu!ta e7c!usão) vocQ não poder> desfaAer a operação.
Se ;uiser saber ;uais ar;uivos foram e7c!u=dos) primeiro e7amine os resu!tados de uma consu!ta
se!eção ;ue use o mesmo critBrio e então) e7ecute a consu!ta e7c!usão. Manten#a os bac9ups de
seus dados. Se vocQ e7c!uir os registros errados) poder> recuper>6!os a partir dos seus bac9ups.
*B% Acessando o m;SC0 via
PHP
Esta'elecendo cone>Les
Para acessar bases de dados num servidor m&SH/) B necess>rio antes estabe!ecer uma cone7ão.
Para isso) deve ser uti!iAado o comando m&s;!_connect) ou o m&s;!_pconnect. A diferença
entre os dois comandos B ;ue o m&s;!_pconnect estabe!ece uma cone7ão permanente) ou seMa)
;ue não B encerrada ao fina! da e7ecução do script. As assinaturas dos dois comandos são
seme!#antes) como pode ser verificado a seguir:
int m&s;!_connect'string a#osta:portaUU ) string a!oginU ) string asen#aU (1
int m&s;!_pconnect'string a#osta:portaUU ) string a!oginU ) string asen#aU (1
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 53
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
? va!or de retorno B um inteiro ;ue identifica a cone7ão) ou fa!so se a cone7ão fa!#ar. Antes de
tentar estabe!ecer uma cone7ão) o interpretador P3P verifica se M> e7iste uma cone7ão
estabe!ecida com o mesmo #ost) o mesmo !ogin e a mesma sen#a. Se e7istir) o identificador
desta cone7ão B retornado. Senão) uma nova cone7ão B criada.
,ma cone7ão estabe!ecida com o comando m&s;!_connect B encerrada ao fina! da e7ecução do
script. Para encerr>6!a antes disso deve ser uti!iAado o comando m&s;!_c!ose) ;ue tem a
seguinte assinatura:
int m&s;!_c!ose'int aidentificador da cone7ãoU (1
Se o identificador não for fornecido) a @!tima cone7ão estabe!ecida ser> encerrada.
IMP?52A+24: o comando m&s;!_c!ose não encerra cone7<es estabe!ecidas com o comando
m&s;!_pconnect.
Selecionando a 'ase de dados
.epois de estabe!ecida a cone7ão) B preciso se!ecionar a base de dados a ser uti!iAada) atravBs
do comando m&s;!_se!ect_db) ;ue segue o seguinte mode!o:
int m&s;!_se!ect_db'string base) int acone7aoU (1
+ovamente) se o identificador da cone7ão não for fornecido) a @!tima cone7ão estabe!ecida ser>
uti!iAada.
/eali8ando consultas
Para e7ecutar consu!tas SH/ no m&SH/) uti!iAa6se o comando m&s;!_;uer&) ;ue tem a seguinte
assinatura:
int m&s;!_;uer&'string ;uer&) int acone7aoU (1
?nde ;uer& B a e7pressão SH/ a ser e7ecutada) sem o ponto6e6v=rgu!a no fina!) e cone7ao B o
identificador da cone7ão a ser uti!iAada. A consu!ta ser> e7ecutada na base de dados se!ecionada
pe!o comando m&s;!_se!ect_db.
Z bom !embrar ;ue uma consu!ta não significa apenas um comando S4/4C2. A consu!ta pode
conter ;ua!;uer comando SH/ aceito pe!o banco.
? va!or de retorno B fa!so se a e7pressão SH/ for incorreta) e diferente de Aero se for correta. +o
caso de uma e7pressão S4/4C2) as !in#as retornadas são armaAenadas numa memGria de
resu!tados) e o va!or de retorno B o identificador do resu!tado. A!guns comandos podem ser
rea!iAados com esse resu!tado:
Apa&ando o resultado
int m&s;!_free_resu!t'int resu!t(1
? comando m&s;!_free6resu!t deve ser uti!iAado para apagar da memGria o resu!tado indicado.
DNmero de lin!as
int m&s;!_num_rows'int resu!t(1
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
? comando m&s;!_num_rows retorna o n@mero de !in#as contidas num resu!tado.
7tili8ando os resultados
47istem diversas maneiras de !er os resu!tados de uma ;uer& S4/4C2. As mais comuns serão
vistas a seguir:
int m&s;!_resu!t'int resu!t) int !in#a) mi7ed acampoU (1
5etorna o conte@do de uma cB!u!a da tabe!a de resu!tados.
result B o identificador do resu!tado1
lin!a B o n@mero da !in#a) iniciado por %1
campo B uma string com o nome do campo) ou um n@mero correspondente ao n@mero da
co!una. Se foi uti!iAado um a!ias na consu!ta) este deve ser uti!iAado no comando m;s,lSresult.
4ste comando deve ser uti!iAado apenas para resu!tados pe;uenos. Huando o vo!ume de dados
for maior) B recomendado uti!iAar um dos mBtodos a seguir:
arra& m&s;!_fetc#_arra&'int resu!t(1
/Q uma !in#a do resu!tado e devo!ve um arra&) cuMos =ndices são os nomes dos campos. A
e7ecução seguinte do mesmo comando !er> a prG7ima !in#a) atB c#egar ao fina! do resu!tado.
arra& m&s;!_fetc#_row'int resu!t(1
Seme!#ante ao comando anterior) com a diferença ;ue os =ndices do arra& são numBricos)
iniciando pe!o % 'Aero(.
Alterando o ponteiro de um resultado
int m&s;!_data_see9'int resu!t) int numero(1
Cada resu!tado possui um DponteiroE) ;ue indica ;ua! ser> a prG7ima !in#a !ida com o comando
m&s;!_fetc#_row 'ou m&s;!_fetc#_arra&(. Para a!terar a posição indicada por esse ponteiro
deve ser uti!iAada a função m&s;!_data_see9) sendo ;ue o n@mero da primeira !in#a de um
resu!tado B Aero.
*F% Acessando o Post&reSC0
via PHP
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 55
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Esta'elecendo cone>Les
Para acessar bases de dados num servidor Postgres) B necess>rio antes estabe!ecer uma
cone7ão. Para isso) deve ser uti!iAado o comando pg_connect) ou o pg_pconnect. A diferença
entre os dois comandos B ;ue o pg_pconnect estabe!ece uma cone7ão permanente) ou seMa) ;ue
não B encerrada ao fina! da e7ecução do script. As assinaturas dos dois comandos são
seme!#antes) como pode ser verificado a seguir:
int pg_connect'string #ost) string porta) string opcoes) string tt&) string db(1
int pg_pconnect'string #ost) string porta) string opcoes) string tt&) string db(1
? va!or de retorno B um inteiro ;ue identifica a cone7ão) ou fa!so se a cone7ão fa!#ar. ,ma
cone7ão estabe!ecida com o comando pg_connect B encerrada ao fina! da e7ecução do script.
Para encerr>6!a antes disso deve ser uti!iAado o comando pg_c!ose) ;ue tem a seguinte
assinatura:
int pg_c!ose'int identificador da cone7ão (1
IMP?52A+24: o comando pg_c!ose não encerra cone7<es estabe!ecidas com o comando
pg_pconnect.
?s comandos pg_connect e pg_pconnect tambBm podem ser uti!iAados da seguinte forma:
pg_connect':dbnameWdb portWn #ostWE!oca!#ostE tt&WEtt&E optionsWopcoes
userWusuario passwordWsen#a:(1
/eali8ando consultas
Para e7ecutar consu!tas SH/ no Postgres) uti!iAa6se o comando pg_e7ec) ;ue tem a seguinte
assinatura:
int pg_e7ec'int cone7ao) string ;uer& (1
?nde ;uer& B a e7pressão SH/ a ser e7ecutada) sem o ponto6e6v=rgu!a no fina!) e cone7ao B o
identificador da cone7ão a ser uti!iAada. A consu!ta ser> e7ecutada na base de dados se!ecionada
;uando for efetuada a cone7ão com o banco. Para saber ;ua! a base de dados se!ecionada) basta
uti!iAar a função string pg_dbname) ;ue tem a seguinte assinatura:
string pg_dbname'int cone7ão(1
Z bom !embrar ;ue uma consu!ta não significa apenas um comando S4/4C2. A consu!ta pode
conter ;ua!;uer comando SH/ aceito pe!o banco.
? va!or de retorno B fa!so se a e7pressão SH/ for incorreta) e diferente de Aero se for correta. +o
caso de uma e7pressão S4/4C2) as !in#as retornadas são armaAenadas numa memGria de
resu!tados) e o va!or de retorno B o identificador do resu!tado. A!guns comandos podem ser
rea!iAados com esse resu!tado:
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
Aerificando o erro na e>ecução de uma ,uer;
Para ter acesso ] mensagem de erro no caso de fa!#a na e7ecução de uma ;uer& SH!) basta
uti!iAar o comando pg_errormessage'(:
string pg_errormessage'int connection(1
Apa&ando o resultado
int pg_freeresu!t'int resu!t(1
? comando pg_freeresu!t deve ser uti!iAado para apagar da memGria o resu!tado indicado. +o
P3P K) este comando tornou6se obso!eto) M> ;ue o interpretador trata de apagar o resu!tado
automaticamente em caso de não ser mais uti!iAado.
DNmero de lin!as
int pg_numrows'int resu!t(1
? comando pg_numrows retorna o n@mero de !in#as contidas num resu!tado.
7tili8ando os resultados
47istem diversas maneiras de !er os resu!tados de uma ;uer& S4/4C2. As mais comuns serão
vistas a seguir:
int pg_resu!t'int resu!t) int !in#a) mi7ed acampoU (1
5etorna o conte@do de uma cB!u!a da tabe!a de resu!tados.
result B o identificador do resu!tado1
!in!a B o n@mero da !in#a) iniciado por %1
campo B uma string com o nome do campo) ou um n@mero correspondente ao n@mero da
co!una. Se foi uti!iAado um a!ias na consu!ta) este deve ser uti!iAado no comando pg_resu!t.
4ste comando deve ser uti!iAado apenas para resu!tados pe;uenos. Huando o vo!ume de dados
for maior) B recomendado uti!iAar um dos mBtodos a seguir:
arra& pg_fetc#_arra&'int resu!t) int !in#a(1
/Q uma !in#a do resu!tado e devo!ve um arra&) cuMos =ndices são os nomes dos campos. ? =ndice
das !in#as B iniciado por Aero.
arra& pg_fetc#_row'int resu!t) int !in#a(1
Seme!#ante ao comando anterior) com a diferença ;ue os =ndices do arra& são numBricos)
iniciando pe!o % 'Aero(.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 57
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
*K% 7tili8ando !eaders
? comando #eader permite enviar cabeça!#os #tm! para o c!iente. .eve ser uti!iAado por usu>rios
;ue con#eçam a função de cada #eader ;ue pode ser enviado. +ão pode ser enviado depois de
a!gum te7to. veMa o seguinte e7emp!o:
[#tm!\
[V #eader':/ocation: #ttp:**www.p#p.net:(1 V\
[bod&\
...
? cGdigo acima causar> um erro) M> ;ue tentou6se enviar um #eader depois de ter sido enviado
um te7to'D[#tm!\`nE(.
A sinta7e do comando #eader B bastante simp!es:
int #eader'string #eader(1
A!gumas uti!iAaç<es do #eader são:
**redirecionar para outra p>gina:
#eader':/ocation: #ttp:**www.p#p.net:(1
** .efinir o script como uma mensagem de erro:
#eader':#ttp*0.% K%K +ot -ound:(1
** .efinir a e7piração da p>gina:
#eader':Cac#e6Contro!: no6cac#e) must6reva!idate:(1 ** 322P*0.0 #eader':Pragma: no6
cac#e:(1 ** 322P*0.%
Para obter uma !ista comp!eta dos #eaders 322P) visite o seguinte endereço:
#ttp:**www.wI.org*Protoco!s*rfc$%NR*rfc$%NR
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
*M% 7tili8ando coo4ies
+ ,ue são
Coo9ies são vari>veis gravadas no c!iente'browser( por um determinado site. Somente o site ;ue
gravou o coo9ie pode !er a informação contida ne!e. 4ste recurso B muito @ti! para ;ue
determinadas informaç<es seMam fornecidas pe!o usu>rio apenas uma veA. 47emp!os de
uti!iAação de coo9ies são sites ;ue informam a ;uantidade de veAes ;ue vocQ M> visitou) ou
a!guma informação fornecida numa visita anterior.
47istem coo9ies persistentes e coo9ies de sessão. ?s persistentes são a;ue!es gravados em
ar;uivo) e ;ue permanecem apGs o browser ser fec#ado) e possuem data e #ora de e7piração.
?s coo9ies de sessão não são armaAenados em disco e permanecem ativos apenas en;uanto a
sessão do browser não for encerrada.
Por definição) e7istem a!gumas !imitaç<es para o uso de coo9ies) !istadas a seguir:
0 I%% coo9ies no tota!
$ K 9i!ob&tes por coo9ie.
I $% coo9ies por servidor ou dom=nio.
Gravando coo4ies
Para gravar coo9ies no c!iente) deve ser uti!iAada a função setcoo9ie) ;ue possui a seguinte
assinatura:
int setcoo9ie'string nome) string va!or) int e7p) string pat#) string dominio) int secure(1
onde:
nome: nome do coo9ie1
valor: va!or armaAenado no coo9ie1
e>p: data de e7piração do coo9ie 'opciona!() no formato ,ni7. Se não for definida) o coo9ie ser>
de sessão1
pat!: pat# do script ;ue gravou o coo9ie1
dominio: dom=nio respons>ve! pe!o coo9ie1
secure: se tiver va!or 0) indica ;ue o coo9ie sG pode ser transmitido por uma cone7ão segura
'#ttps(.
?bservaç<es:
,m coo9ie não pode ser recuperado na mesma p>gina ;ue o gravou) a menos ;ue esta seMa
recarregada pe!o browser.
M@!tip!as c#amadas ] função setcoo9ie serão e7ecutadas em ordem inversa1
Coo9ies sG podem ser gravados antes do envio de ;ua!;uer informação para o c!iente. Portanto
todas as c#amadas ] função setcoo9ie devem ser feitas antes do envio de ;ua!;uer #eader ou
te7to.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 59
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
0endo coo4ies &ravados
?s coo9ies !idos por um script P3P ficam armaAenados em duas vari>veis. no arra&
i322P_C??pI4_VA5SaU) tendo como =ndice a string do nome do coo9ie) e numa vari>ve! cuMo
nome B o mesmo do coo9ie) precedido pe!o s=mbo!o i.
47emp!o:
,m coo9ie ;ue foi gravado numa p>gina anterior pe!o seguinte comando:
setcoo9ie'DtesteE) Dmeu coo9ieE(1
Pode ser !ida pe!a vari>ve!
i322P_C??pI4_VA5SaDtesteEU
ou pe!a vari>ve!
iteste
*P% :anipulando ar,uivos
AtravBs do P3P B poss=ve! ter acesso aos ar;uivos do sistema) e atB ar;uivos remotos. A seguir
veremos a!guns dos comandos uti!iAados para manipu!ar ar;uivos no P3P.
Copiando Ar,uivos
Para faAer uma cGpia de ar;uivo uti!iAando P3P basta uti!iAar a função cop&) desde ;ue o usu>rio
ten#a as permiss<es necess>rias para isso. A assinatura da função cop& B a seguinte:
int cop&'string origem string destino(1
/embrando ;ue as strings contendo origem e destino devem conter os camin#os comp!etos.
5etorna fa!se caso a cGpia não seMa rea!iAada.
Aerificando o taman!o de um ar,uivo
A função fi!esiAe pode ser bastante @ti! na criação de um script ;ue !iste o conte@do de um
diretGrio) mas tambBm B uti!iAada em casos como a função fread) ;ue ser> vista mais adiante.
int fi!esiAe'string ar;uivo(1
4sta função retorna um inteiro com o taman#o do ar;uivo) em b&tes) ou fa!se em caso de erro.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
Aerificando se um ar,uivo e>iste
Para evitar erros em tratamento de ar;uivos) em certos casos B aconse!#>ve! verificar se
determinado ar;uivo e7iste. para isso deve ser uti!iAada a função fi!e_e7ists:
int fi!e_e7ists'string ar;uivo(1
4sta função tem um comportamento boo!eano: retorna apenas true ou fa!se) não informando
mais nada sobre o ar;uivo.
0impando o cac!e
Por terem e7ecução !enta) a!gumas funç<es ;ue verificam o estado de ar;uivos uti!iAam um
cac#e) ou seMa) c#amadas sucessivas da mesma função com re!ação ao mesmo ar;uivo não
verificam se #ouve mudança no mesmo) retornando sempre o mesmo va!or. Para e!iminar esse
cac#e) obrigando o P3P a reava!iar o va!or de retorno de uma função) deve ser uti!iAada a
seguinte função:
void c!earstatcac#e'(1
A pa!avra DvoidE indica ;ue a função não retorna va!or a!gum.
As funç<es fi!esiAe e fi!e_e7ists uti!iAam cac#e.
A'rindo ar,uivos para leitura e1ou escrita
Para !er ou escrever num ar;uivo B preciso antes de ;ua!;uer coisa abri6!o. Para isso deve ser
uti!iAada a função fopen) como visto a seguir:
int fopen'string ar;uivo) string modo) int ause_inc!ude_pat#U(1
A função fopen retorna fa!se em caso de erro) e um identificador do ar;uivo em caso de sucesso.
4sse identificador ser> uti!iAado em outras funç<es ;ue manipu!am o conte@do do ar;uivo. ?
primeiro argumento B uma string contendo o nome do ar;uivo1 o segundo) o modo como o
ar;uivo ser> aberto) ;ue pode ser um dos seguintes:
r
Abre o ar;uivo com permissão apenas para !eitura.
rk
Abre o ar;uivo com permissão para escrita e !eitura) posicionando o
ponteiro no in=cio do mesmo.
w
Abre o ar;uivo com permissão apenas para escrita. Se o ar;uivo e7istir)
todo o conte@do B apagado. Se não e7istir) o P3P tenta cri>6!o. ?
ponteiro B posicionado no in=cio do ar;uivo
wk
Abre o ar;uivo com permissão para escrita e !eitura. Se o ar;uivo
e7istir) todo o conte@do B apagado. Se não e7istir) o P3P tenta cri>6!o.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 61
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
? ponteiro B posicionado no in=cio do ar;uivo
a
Abre o ar;uivo com permissão apenas para escrita. Se o ar;uivo não
e7istir) o P3P tenta cri>6!o. ? ponteiro B posicionado no fina! do ar;uivo
ak
Abre o ar;uivo com permissão para escrita e !eitura. Se o ar;uivo não
e7istir) o P3P tenta cri>6!o. ? ponteiro B posicionado no fina! do ar;uivo.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
? ponteiro citado na tabe!a dos modos de abrir um ar;uivo refere6se ] posição a partir de onde
os dados serão !idos e*ou gravados. Para a!terar a posição desse ponteiro) pode6se uti!iAar a
função fsee9:
int fsee9'int fp) int posição(1
?nde fp B um identificador de ar;uivo) retornado da função fopen.
? terceiro parCmetro da função fopen) ;ue pode ter va!or D%E ou D0E indica se o inc!ude_pat#
dever> ser uti!iAado para !oca!iAar o ar;uivo. ? inc!ude_pat# B um parCmetro determinado no
p#p.ini ;ue indica e7atamente em ;uais diretGrios determinados ar;uivos serão procurados.
A!Bm de abrir ar;uivos !oca!mente) uti!iAando o sistema de ar;uivos) a função fopen tambBm
permite abrir ar;uivos remotos) uti!iAando os protoco!os #ttp ou ftp) da seguinte maneira:
Se a string como o nome do ar;uivo iniciar por D#ttp:**E 'mai@scu!as e min@scu!as são iguais()
uma cone7ão B aberta com o servidor e o ar;uivo contendo o te7to de retorno ser> aberto.
A24+qr?: ;ua!;uer a!teração feita no ar;uivo afetar> apenas o ar;uivo tempor>rio !oca!. ?
origina! ser> mantido.
Se a string como o nome do ar;uivo iniciar por Dftp:**E 'mai@scu!as e min@scu!as são iguais() uma
cone7ão B aberta com o servidor e o ar;uivo ser> aberto. uti!iAando ftp o ar;uivo poder> ser
aberto para !eitura ou escrita) mas não simu!taneamente.
Para encerrar a manipulação de um ar,uivo deve$se
utili8ar a função fcloseU ,ue tem o se&uinte formato@
int fc!ose'int fp(1
?nde fp B o identificador do ar;uivo) retornado pe!a função fopen.
0endo de um ar,uivo
string fread'int fp) int taman#o(1
4sta função retorna uma string com o conte@do do ar;uivo. ? segundo parCmetro determina atB
onde o ar;uivo ser> !ido. Se o taman#o determinado for maior ;ue o ar;uivo) não ocorre erro)
tendo como retorno apenas o ar;uivo. +a maioria dos casos a função fi!esiAe B bastante @ti!)
como no e7emp!o abai7o:
imeuar;uivo W Dc:*autoe7ec.batE1
iid W fopen'imeuar;uivo) DrE(1
iconteudo W fread'iid)fi!esiAe'imeuar;uivo((1
A função fread B Dbinar&6safeE) ou seMa) pode ser usada para !er o conte@do de um ar;uivo
bin>rio. ?bviamente nesse caso B preciso saber e7atamente onde uti!iAar o va!or !ido) para não
obter resu!tados indeseMados.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 63
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Escrevendo em um ar,uivo
int fwrite'int fp) string conteudo) int ataman#oU(1
4sta função grava num ar;uivo o conte@do do segundo parCmetro. Se o taman#o B fornecido e
for menor ;ue o taman#o da string) ser> feita a gravação apenas de uma parte da mesma)
determinada pe!o terceiro parCmetro.
E>emplo
Para demonstrar a !eitura de um ar;uivo) uti!iAaremos um e7emp!o ;ue necessita apenas de uma
imagem do tipo I-) ;ue deve estar no mesmo diretGrio ;ue nosso script de e7emp!o.
[V
Tar,uivo W Xteste%&ifYR %& este nome de'e ser alterado para o nome do arqui'o a ser
utili(ado &%
Tid W fopenGTar,uivoU XrYJR %& a)re o arqui'o para leitura &%
Tconteudo W freadGTidUfilesi8eGTar,uivoJJR %& le o conteudo do arqui'o e gra'a na
'aria'el *conteudo &%
fcloseGTidJR %& echa o arqui'o &%
!eaderGXContent$t;pe@ ima&e1&ifYJR %& esta linha en'ia um header ao )ro$ser
inormando que o tipo de arqui'o que está sendo en'iado + uma imagem no ormato gi
&%
ec!o TconteudoR %& esta ,ltima linha en'ia ao )ro$ser o conte,do do arqui'o &%
V\
Para ;ue o e7emp!o funcione corretamente B preciso ;ue o script seMa apenas o ;ue est> !istado)
não podendo #aver te7to a!gum 'nem mesmo espaço ou !in#a em branco( antes e depois do
script. Visua!isando o script pe!o browser) teremos a imagem se!ecionada.
7ploads com formul)rios H6:0
Vimos no cap=tu!o %I ;ue os formu!>rios 32M/ tQm um tipo de componente uti!iAado em up!oad
de ar;uivos. Vimos tambBm ;ue todos os e!ementos de formu!>rios ;uando submetidos a scripts
P3P criam vari>veis com os mesmos nomes. mas no caso do e!emento Dfi!eE) o tratamento B
diferente. Ao ser submetido o formu!>rio) o ar;uivo up!oadeado B gravado num ar;uivo
tempor>rio do disco) ;ue ser> apagado ao fina! da e7ecução do script. A!Bm disso) ;uatro
vari>veis são criadas no conte7to do script P3P.
imeuar;uivo ^ nome do ar;uivo temporario criado1
imeuar;uivo_name ^ nome origina! do ar;uivo se!ecionado pe!o usu>rio1
imeuar;uivo_siAe ^ taman#o do ar;uivo enviado1
imeuar;uivo_t&pe ^ tipo do ar;uivo) se esta informação for fornecida pe!o browser1
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
+este e7emp!o) Dmeu ar;uivoE B o nome do e!emento do formu!>rio.
Para armaAenar o conte@do de um ar;uivo numa tabe!a da base de dados ou atB num ar;uivo
definitivo 'neste segundo caso B mais simp!es uti!iAar a função cop&( podemos uti!iAar o
seguinte script) supondo ;ue o campo do formu!>rio ten#a o nome DtesteE:
[V
Tid W fopenGTtesteU XrYJR %& a)re o arqui'o para leitura &%
TtesteSconteudo W freadGTidUfilesi8eGTtesteJJR %& le o conteudo do arqui'o e gra'a
na 'aria'el *conteudo &%
fcloseGTidJR %& echa o arqui'o &%
V\
Com o e7emp!o acima) teremos o conteudo do ar;uivo enviado armaAenado na string
iteste_conteudo) podendo assim ser armaAenado onde for mais ade;uado.
*Q% Enviando e$mail
Para enviar e6mai! atravBs de um script P3P B bastante simp!es. 8asta uti!iAar a função mai!:
mai!'string to) string subMect) string message) string a#eadersU(1
onde:
to ^ string contendo o e6mai! do destinat>rio1
su'Oect ^ assunto da mensagem1
messa&e ^ o corpo da mensagem.
!eaders ^ outras informaç<es de cabeça!#o) como por e7emp!o DfromE) Drep!&6toE) DbccE) etc.
Para faci!itar a compreensão dos scripts) os argumentos 'como gera!mente são strings grandes(
devem ser atribu=dos a vari>veis antes da c#amada da função mai!.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 65
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
"#% Bi'lio&rafia e /eferências
A pes;uisa foi baseada no manua! de P3P) dispon=ve! em www.php.net) e em diversos tutoriais
dispon=veis no site www.phpbuilder.com. 4sses dois endereços contBm uma vasta
documentação sobre a !inguagem) a!Bm de endereços para !istas de discussão) onde pode6se
so!icitar aMuda de programadores mais e7perientes.
,ma boa referQncia em portuguQs B a !ista -PHP para quem ala Portugu.s/) ;ue pode ser
assinada no endereço www.egroups.com/group/php-pt/.
4m ing!Qs) a!Bm dos endereços citados acima) uma boa fonte B o site PHP0i(ard) ;ue pode ser
encontrado em www.phpwizard.net.
2ambBm em ing!Qs) uma documentação mais comp!eta sobre coo9ies pode ser encontrada em
www.netscape.com/newsref/std/cookie_spec.html.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
APZD5ICE #* $ 2unçLes para
tratamento de strin&s
2unçLes relacionadas a H6:0
!tmlspecialc!ars
string #tm!specia!c#ars'string str(1
5etorna a string fornecida) substituindo os seguintes caracteres:
• X para SXamp1S
• : para SX;uot1S
• [ para SX!t1S
• \ para sXgt1S
!tmlentities
string #tm!entities'string str(1
-unciona de maneira seme!#ante ao comando anterior) mas de maneira mais comp!eta) pois
converte todos os caracteres da string ;ue possuem uma representação especia! em #tm!) como
por e7emp!o:
• t para SXordm1S
• u para SXordf1S
• > para SXaacute1S
• ç para sXccedi!1S
nl"'r
string n!$br'string str(1
5etorna a string fornecida substituindo todas as ;uebras de !in#a 'D`nE( por ;uebras de !in#as em
#tm! 'D[br\E(.
47emp!o:
ec#o n!$br'DMauricio`nVivas`nE(1
Imprime:
Maur=cio[br\Vivas[br\
&etSmetaSta&s
arra& get_meta_tags'string ar;uivo(1
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 67
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Abre um ar;uivo #tm! e percorre o cabeça!#o em busca de DmetaE tags) retornando num arra&
todos os va!ores encontrados.
47emp!o:
+o ar;uivo teste.#tm! temos:
...
[#ead\
[meta nameW:aut#or: contentW:Mose:\
[meta nameW:tags: contentW:p#pI documentation:\
...
[*#ead\[n66 busca encerra a;ui 66\
...
a e7ecução da função:
get_meta_tags'Dteste.#tm!E(1
retorna o arra&:
arra&'Daut#orEW\EMoseE)EtagsEW\:p#pI documentation:(1
stripSta&s
string strip_tags'string str(1
5etorna a string fornecida) retirando todas as tags #tm! e*ou P3P encontradas.
47emp!o:
strip_tags'S[a #refW:teste0.p#pI:\testando[*a\[br\S(1
5etorna a string DtestandoE
urlencode
string ur!encode'string str(1
5etorna a string fornecida) convertida para o formato ur!encode. 4sta função B @ti! para passar
vari>veis para uma prG7ima p>gina.
urldecode
string ur!decode'string str(1
-unciona de maneira inversa a ur!encode) desta veA decodificando a string fornecida do formato
ur!encode para te7to norma!.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
2unçLes relacionadas a arra;s
Implode e Ooin
string imp!ode'string separador) arra& partes(1
string Moin'string separador) arra& partes(1
As duas funç<es são idQnticas. 5etornam uma string contendo todos os e!ementos do arra&
fornecido separados pe!a string tambBm fornecida.
47emp!o:
ipartes W arra&':a:) :casa n@mero:) 0I) :B aAu!:(1
iinteiro W Moin': :)ipartes(1
iinteiro passa a conter a string:
Da casa n@mero 0I B aAu!E
split
arra& sp!it'string padrao) string str) int a!imiteU(1
5etorna um arra& contendo partes da string fornecida separadas pe!o padrão fornecido) podendo
!imitar o n@mero de e!ementos do arra&.
47emp!o:
idata W D00*0K*0JOLE1
idata_arra& W sp!it'D*E)idata(1
? cGdigo acima faA com ;ue a vari>ve! idata_arra& receba o va!or:
arra&'00)0K)0JOL(1
e>plode
arra& e7p!ode'string padrao) string str(1
-unciona de maneira bastante seme!#ante ] função sp!it) com a diferença ;ue não B poss=ve!
estabe!ecer um !imite para o n@mero de e!ementos do arra&.
ComparaçLes entre strin&s
similarSte>t
int simi!ar_te7t'string str0) string str$) doub!e aporcentagemU(1
Compara as duas strings fornecidas e retorna o n@mero de caracteres coincidentes.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 69
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
?pciona!mente pode ser fornecida uma vari>ve!) passada por referQncia 1'er t2pico so)re
unç3es4) ;ue receber> o va!or percentua! de igua!dade entre as strings. 4sta função B case
sensiti'e) ou seMa) mai@scu!as e min@scu!as são tratadas como diferentes.
47emp!o:
inum W simi!ar_te7t':teste:) :testando:)Xiporc(1
As vari>veis passam a ter os seguintes va!ores:
inum WW K1 iporc WW N0.LIRKN0LIRKN$
strcasecmp
int strcasecmp'string str0) string str$(1
Compara as duas strings e retorna % 'Aero( se forem iguais) um va!or maior ;ue Aero se str0 \
str$) e um va!or menor ;ue Aero se str0 [ str$. 4sta função B case insensiti'e) ou seMa)
mai@scu!as e min@scu!as são tratadas como iguais.
strcmp
int strcasecmp'string str0) string str$(1
-unciona de maneira seme!#ante ] função strcasecmp) com a diferença ;ue esta B case
sensiti'e) ou seMa) mai@scu!as e min@scu!as são tratadas como diferentes.
strstr
string strstr'string str0) string str$(1
string strc#r'string str0) string str$(1
As duas funç<es são idQnticas. Procura a primeira ocorrQncia de str$ em str0. Se não encontrar)
retorna uma string vaAia) e se encontrar retorna todos os caracteres de str0 a partir desse ponto.
47emp!o:
strstr':Mauricio Vivas:) :Viv:(1 ** retorna DVivasE
stristr
string strstr'string str0) string str$(1
-unciona de maneira seme!#ante ] função strstr) com a diferença ;ue esta B case insensiti'e) ou
seMa) mai@scu!as e min@scu!as são tratadas como iguais.
strpos
int strpos'string str0) string str$) int aoffsetU (1
5etorna a posição da primeira ocorrQncia de str$ em str0) ou Aero se não #ouver. ? parCmetro
opciona! offset determina a partir de ;ua! caracter de str0 ser> efetuada a busca. Mesmo
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
uti!iAando o offset) o va!or de retorno B referente ao in=cio de str0.
strrpos
int strrpos'string #a&stac9) c#ar need!e(1
5etorna a posição da @!tima ocorrQncia de str$ em str0) ou Aero se não #ouver.
2unçLes para edição de strin&s
c!op
string c#op'string str(1
5etira espaços e !in#as em branco do fina! da string fornecida.
47emp!o:
c#op'D 2este `n `n D(1 ** retorna D 2esteE
ltrim
string !trim'string str(1
5etira espaços e !in#as em branco do fina! da string fornecida.
47emp!o:
!trim'D 2este `n `n D(1 ** retorna D2este `n `nE
trim
string trim'string str(1
5etira espaços e !in#as em branco do in=cio e do fina! da string fornecida.
47emp!o:
trim'D 2este `n `n D(1 ** retorna D2esteE
strrev
string strrev'string str(1
5etorna a string fornecida invertida.
47emp!o:
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 71
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
strrev'D2esteE(1 ** retorna Detse2E
strtolower
string strto!ower'string str(1
5etorna a string fornecida com todas as !etras min@scu!as.
47emp!o:
strto!ower'D2esteE(1 ** retorna DtesteE
strtoupper
string strtoupper'string str(1
5etorna a string fornecida com todas as !etras mai@scu!as.
47emp!o:
strto!ower'D2esteE(1 ** retorna D24S24E
ucfirst
string ucfirst'string str(1
5etorna a string fornecida com o primeiro caracter convertido para !etra mai@scu!a.
47emp!o:
ucfirst'Dteste de funcaoE(1 ** retorna D2este de funcaoE
ucwords
string ucwords'string str(1
5etorna a string fornecida com todas as pa!avras iniciadas por !etras mai@scu!as.
47emp!o:
ucwords'Dteste de funcaoE(1 ** retorna D2este .e -uncaoE
strSreplace
string str_rep!ace'string str0) string str$) string strI(1
A!tera todas as ocorrQncias de str0 em strI pe!a string str$.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
2unçLes diversas
c!r
string c#r'int ascii(1
5etorna o caracter correspondente ao cGdigo ASCII fornecido.
ord
int ord'string string(1
5etorna o cGdigo ASCII correspontente ao caracter fornecido.
ec!o
ec#o'string arg0) string aargnU... (1
Imprime os argumentos fornecidos.
print
print'string arg(1
Imprime o argumento fornecido.
strlen
int str!en'string str(1
5etorna o taman#o da string fornecida.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 73
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
APZD5ICE #" $ 2unçLes para
tratamento de arra;s
2unçLes Gen-ricas
Arra;
arra& arra&'...(1
Z a função ;ue cria um arra& a partir dos parCmetros forncidos. Z poss=ve! fornecer o =ndice de
cada e!emento. 4sse =ndice pode ser um va!or de ;ua!;uer tipo) e não apenas de inteiro. Se o
=ndice não for fornecido o P3P atribui um va!or inteiro se;uencia!) a partir do % ou do @!timo
=ndice inteiro e7p!icitado. VeMamos a!guns e7emp!os:
47emp!o 0
iteste W arra&':um:) :dois:):tr:W\:tres:)LW\:;uatro:):cinco:(1
2emos o seguinte mapeamento:
# W\ DumE '% B o primeiro =ndice) se não #ouver um e7p!icito(
* W\ DdoisE 'o inteiro seguinte(
tr W\ DtresE
F W\ D;uatroE 'va!or e7p!icitado(
K W\ DcincoE 'o inteiro seguinte ao @!timo atribu=do) e não o prG7imo va!or) ;ue seria $(
47emp!o $
iteste W arra&':um:) NW\:dois:):tr:W\:tres:)LW\:;uatro:):cinco:(1
2emos o seguinte mapeamento:
# W\ DumE
K W\ DdoisE
tr W\ tres
F W\ D;uatroE 'seria O) se não fosse e7p!icitado(
M W\ DcincoE 'seria N) se não estivesse ocupado(
4m gera!) não B recomend>ve! uti!iAar arra&s com v>rios tipos de =ndices) M> ;ue isso pode
confundir o programador. +o caso de rea!mente #aver a necessidade de uti!iAar esse recurso)
deve6se ter bastante atenção ao manipu!ar os =ndices do arra&.
ran&e
arra& range'int minimo) int ma7imo(1
A função range cria um arra& cuMos e!ementos são os inteiros pertencentes ao interva!o
fornecido) inc!usive. Se o va!or do primeiro parCmetro for maior do ;ue o do segundo) a função
retorna fa!se 'va!or vaAio(.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
s!uffle
void s#uff!e'arra& Xarr(1
4sta função Dembara!#aE o arra&) ou seMa) troca as posiç<es dos e!ementos a!eatoriamente e não
retorna va!or a!gum.
si8eof
int siAeof'arra& arr(1
5etorna um va!or inteiro contendo o n@mero de e!ementos de um arra&. Se for uti!iAada com uma
vari>ve! cuMo va!or não B do tipo arra&) retorna 0. Se a vari>ve! não estiver setada ou for um arra&
vaAio) retorna %.
2unçLes de Xnave&açãoY
2oda vari>ve! do tipo arra& possui um ponteiro interno indicando o prG7imo e!emento a ser
acessado no caso de não ser especificado um =ndice. As funç<es seguintes servem para modificar
esse ponteiro) permitindo assim percorrer um arra& para verificar seu conte@do 'c#aves e
e!ementos(.
reset
mi7ed reset'arra& arr(1
Seta o ponteiro interno para o primeiro e!emento do arra&) e retorna o conte@do desse e!emento.
end
mi7ed end'arra& arr(1
Seta o ponteiro interno para o @!timo e!emento do arra&) e retorna o conte@do desse e!emento.
ne>t
mi7ed ne7t'arra& arr(1
Seta o ponteiro interno para o prG7imo e!emento do arra&) e retorna o conte@do desse e!emento.
?bs.: esta não B uma boa função para determinar se um e!emento B o @!timo do arra&) pois pode
retornar fa!se tanto no fina! do arra& como no caso de #aver um e!emento vaAio.
prev
mi7ed prev'arra& arr(1
Seta o ponteiro interno para o e!emento anterior do arra&) e retorna o conte@do desse e!emento.
-unciona de maneira inversa a ne7t.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 75
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
pos
mi7ed pos'arra& arr(1
5etorna o conte@do do e!emento atua! do arra&) indicado pe!o ponteiro interno.
4e;
mi7ed 9e&'arra& arr(1
-unciona de maneira bastante seme!#ante a pos) mas ao invBs de retornar o e!emento atua!
indicado pe!o ponteiro interno do arra&) retorna seu =ndice.
eac!
arra& eac#'arra& arr(1
5etorna um arra& contendo o =ndice e o e!emento atua! indicao pe!o ponteiro interno do arra&. o
va!or de retorno B um arra& de ;uatro e!ementos) cuMos =ndices são %) 0) D9e&E e Dva!ueE. ?s
e!ementos de =ndices % e D9e&E armaAenam o =ndice do va!or atua!) e os e!ementos de =ndices 0 e
Dva!ueE contBm o va!or do e!emento atua! indicado pe!o ponteiro.
4sta função pode ser uti!iAada para percorrer todos os e!ementos de um arra& e determinar se M>
foi encontrado o @!timo e!emento) pois no caso de #aver um e!emento vaAio) a função não
retornar> o va!or fa!se. A função eac# sG retorna fa!se depois ; o @!timo e!emento do arra& foi
encontrado.
47emp!o:
*Yfunção ;ue percorre todos os e!ementos de um arra& e imprime seus =ndices e
va!ores Y*
function imprime_arra&'iarr( b
reset'iarr(1
w#i!e '!ist'ic#ave)iva!or( W eac#'iarr((
ec#o DC#ave: ic#ave. Va!or: iva!orE1
d
2unçLes de ordenação
São funç<es ;ue servem para arrumar os e!ementos de um arra& de acordo com determinados
critBrios. 4stes critBrios são: manutenção ou não da associação entre =ndices e e!ementos1
ordenação por e!ementos ou por =ndices1 função de comparação entre dois e!ementos.
sort
void sort'arra& Xarr(1
A função mais simp!es de ordenação de arra&s. ?rdena os e!ementos de um arra& em ordem
crescente) sem manter os re!acionamentos com os =ndices.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
rsort
void rsort'arra& Xarr(1
-unciona de maneir ainversa ] função sort. ?rdena os e!ementos de um arra& em ordem
decrescente) sem manter os re!acionamentos com os =ndices.
asort
void asort'arra& Xarr(1
2em o funcionamento bastante seme!#ante ] função sort. ?rdena os e!ementos de um arra& em
ordem crescente) porBm mantBm os re!acionamentos com os =ndices.
arsort
void arsort'arra& Xarr(1
-unciona de maneira inversa ] função asort. ?rdena os e!ementos de um arra& em ordem
decrescente e mantBm os re!acionamentos dos e!ementos com os =ndices.
4sort
void 9sort'arra& Xarr(1
-unção de ordenação baseada nos =ndices. ?rdena os e!ementos de um arra& de acordo com
seus =ndices) em ordem crescente) mantendo os re!acionamentos.
usort
void usort'arra& Xarr) function compara(1
4sta B uma função ;ue uti!iAa outra função como parCmetro. ?rdena os e!ementos de um arra&
sem manter os re!acionamentos com os =ndices) e uti!iAa para efeito de comparação uma função
definida pe!o usu>rio) ;ue deve comparar dois e!ementos do arra& e retornar %) 0 ou ^0) de
acordo com ;ua!;uer critBrio estabe!ecido pe!o usu>rio.
uasort
void uasort'arra& Xarr) function compara(1
4sta função tambBm uti!iAa outra função como parCmetro. ?rdena os e!ementos de um arra& e
mantBm os re!acionamentos com os =ndices) uti!iAando para efeito de comparação uma função
definida pe!o usu>rio) ;ue deve comparar dois e!ementos do arra& e retornar %) 0 ou ^0) de
acordo com ;ua!;uer critBrio estabe!ecido pe!o usu>rio.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 77
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
u4sort
void u9sort'arra& Xarr) function compara(1
4sta função ordena o arra& atravBs dos =ndices) mantendo os re!acionamentos com os
e!ementos.) e uti!iAa para efeito de comparação uma função definida pe!o usu>rio) ;ue deve
comparar dois =ndices do arra& e retornar %) 0 ou ^0) de acordo com ;ua!;uer critBrio
estabe!ecido pe!o usu>rio.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
APZD5ICE #9 [ 6ipos
suportados pelo m;SC0
Dum-ricos
+ome do tipo Espaço utili8ado
2I+eI+2
0 b&te
SMA//I+2
$ b&tes
M4.I,MI+2
I b&tes
I+2
K b&tes
I+2445
K b&tes
8II+2
R b&tes
-/?A2'g(
K if g [W $K or R if $L [W g [W
LI
-/?A2
K b&tes
.?,8/4
R b&tes
.?,8/4 P54CISI?+
R b&tes
54A/
R b&tes
.4CIMA/'M).(
M b&tes '.k$) if M [ .(
+,M45IC'M).(
M b&tes '.k$) if M [ .(
5ata e Hora
+ome do tipo Espaço utili8ado
.A24
I b&tes
.A242IM4
R b&tes
2IM4S2AMP
K b&tes
2IM4
I b&tes
e4A5
0 b&te
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 79
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Strin&s
+ome do tipo Espaço utili8ado
C3A5'M( M b&tes) 0 [W M [W $LL
VA5C3A5'M( /k0 b&tes) onde / [W M e 0 [W M [W $LL
2I+e8/?8) 2I+e24g2 /k0 b&tes) onde / [ $TR
8/?8) 24g2 /k$ b&tes) onde / [ $T0N
M4.I,M8/?8)
M4.I,M24g2
/kI b&tes) onde / [ $T$K
/?+8/?8)
/?+24g2
/kK b&tes) onde / [ $TI$
4+,M'Sva!ue0S)Sva!ue
$S)...(
0 ou $ b&tes
S42'Sva!ue0S)Sva!ue$S)
...(
0) $) I) K ou R b&tes
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
Dotas do autor
4ste documento foi criado inicia!mente como parte do proMeto de conc!usão de curso da
,niversidade -edera! de Sergipe) e distribu=do gratuitamente atravBs da Internet.
.epois de terminado o proMeto) recebi diversas sugest<es sobre conte@do a inc!uir) e
tambBm passei a dar cursos de P3P em diversas instituiç<es de Sergipe. .iante disso)
continuei a escrever o documento) sendo a!gumas inc!us<es para atender ]s sugest<es
e outras para uti!iAar nos cursos.
Como poder> ser observado principa!mente no cap=tu!o %L) o documento não est>
conc!u=do) e nem sei se a!gum dia estar>) tendo em vista ;ue o uso de P3P cresce cada
veA mais) e ainda fa!ta muito a ser dito sobre e!e a;ui.
Apesar de citar em a!guns pontos o P3PK) o documento ainda B baseado em P3PI)
!ançado #> menos de um mQs. PorBm todo o conte@do ;ue segue B compat=ve! com
P3PK) e por isso não #> prob!ema em !ançar esta nova versão baseada em P3PI.
Se vocQ tem uma p>gina com tutoriais) ou gostou deste documento e ;uer pub!ic>6!o em
seu site) fi;ue ] vontade. SG peço duas coisas:
%YMe avise) informando a ,5/ do site 'sG por curiosidade min#a(1
0Y/embre6se ;ue o autor do documento sou eu. Apesar de ainda não ter
visto) M> fui informado ;ue #> cGpias piratas deste documento. Mas ;uero
!embrar ;ue não B preciso piratear a!go comp!etamente G/A67I6+.
$Y
Se #ouver a!guma informação incorreta) peço ;ue me informem por e6mai!. Se tiverem
d@vidas sobre temas tratados a;ui) ou atB sobre os ainda não presentes neste
documento) entrem em contato comigo por e6mai!.
Para obter a versão origina! do documento) vocQ pode pedir por e6mai!) ou visitar o site
www.vivas.com.br.
Meu e6mai! pessoa!V mauricio(vivas%com%'r%
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 81
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Controle de versLes
Data Autor Observações
00*%L*%%
Maur=cio Vivas Versão inicia! disponibi!iAada no CIPSA
0J*%N*%%
Maur=cio Vivas Segunda Versão da aposti!a
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
GD7 2ree 5ocumentation 0icense
Version 0.0) Marc# $%%%
Cop&rig#t 'C( $%%% -ree Software -oundation) Inc.
LJ 2emp!e P!ace) Suite II%) 8oston) MA %$00060I%O ,SA
4ver&one is permitted to cop& and distribute verbatim copies
of t#is !icense document) but c#anging it is not a!!owed.
#% P/EA:B0E
2#e purpose of t#is /icense is to ma9e a manua!) te7tboo9) or ot#er written document :free: in
t#e sense of freedom: to assure ever&one t#e effective freedom to cop& and redistribute it) wit#
or wit#out modif&ing it) eit#er commercia!!& or noncommercia!!&. Secondari!&) t#is /icense
preserves for t#e aut#or and pub!is#er a wa& to get credit for t#eir wor9) w#i!e not being
considered responsib!e for modifications made b& ot#ers.
2#is /icense is a 9ind of :cop&!eft:) w#ic# means t#at derivative wor9s of t#e document must
t#emse!ves be free in t#e same sense. It comp!ements t#e +, enera! Pub!ic /icense) w#ic# is
a cop&!eft !icense designed for free software.
Fe #ave designed t#is /icense in order to use it for manua!s for free software) because free
software needs free documentation: a free program s#ou!d come wit# manua!s providing t#e
same freedoms t#at t#e software does. 8ut t#is /icense is not !imited to software manua!s1 it can
be used for an& te7tua! wor9) regard!ess of subMect matter or w#et#er it is pub!is#ed as a printed
boo9. Fe recommend t#is /icense principa!!& for wor9s w#ose purpose is instruction or reference.
*% APP0ICABI0I6E AD5 5E2IDI6I+DS
2#is /icense app!ies to an& manua! or ot#er wor9 t#at contains a notice p!aced b& t#e cop&rig#t
#o!der sa&ing it can be distributed under t#e terms of t#is /icense. 2#e :.ocument:) be!ow) refers
to an& suc# manua! or wor9. An& member of t#e pub!ic is a !icensee) and is addressed as :&ou:.
A :Modified Version: of t#e .ocument means an& wor9 containing t#e .ocument or a portion of
it) eit#er copied verbatim) or wit# modifications and*or trans!ated into anot#er !anguage.
A :Secondar& Section: is a named appendi7 or a front6matter section of t#e .ocument t#at dea!s
e7c!usive!& wit# t#e re!ations#ip of t#e pub!is#ers or aut#ors of t#e .ocument to t#e .ocumentSs
overa!! subMect 'or to re!ated matters( and contains not#ing t#at cou!d fa!! direct!& wit#in t#at
overa!! subMect. '-or e7amp!e) if t#e .ocument is in part a te7tboo9 of mat#ematics) a Secondar&
Section ma& not e7p!ain an& mat#ematics.( 2#e re!ations#ip cou!d be a matter of #istorica!
connection wit# t#e subMect or wit# re!ated matters) or of !ega!) commercia!) p#i!osop#ica!) et#ica!
or po!itica! position regarding t#em.
2#e :Invariant Sections: are certain Secondar& Sections w#ose tit!es are designated) as being
t#ose of Invariant Sections) in t#e notice t#at sa&s t#at t#e .ocument is re!eased under t#is
/icense.
2#e :Cover 2e7ts: are certain s#ort passages of te7t t#at are !isted) as -ront6Cover 2e7ts or
8ac96Cover 2e7ts) in t#e notice t#at sa&s t#at t#e .ocument is re!eased under t#is /icense.
A :2ransparent: cop& of t#e .ocument means a mac#ine6readab!e cop&) represented in a format
w#ose specification is avai!ab!e to t#e genera! pub!ic) w#ose contents can be viewed and edited
direct!& and straig#tforward!& wit# generic te7t editors or 'for images composed of pi7e!s(
generic paint programs or 'for drawings( some wide!& avai!ab!e drawing editor) and t#at is
suitab!e for input to te7t formatters or for automatic trans!ation to a variet& of formats suitab!e
for input to te7t formatters. A cop& made in an ot#erwise 2ransparent fi!e format w#ose mar9up
#as been designed to t#wart or discourage subse;uent modification b& readers is not
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 83
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
2ransparent. A cop& t#at is not :2ransparent: is ca!!ed :?pa;ue:.
47amp!es of suitab!e formats for 2ransparent copies inc!ude p!ain ASCII wit#out mar9up) 2e7info
input format) /a2eg input format) SM/ or gM/ using a pub!ic!& avai!ab!e .2.) and
standard6conforming simp!e 32M/ designed for #uman modification. ?pa;ue formats inc!ude
PostScript) P.-) proprietar& formats t#at can be read and edited on!& b& proprietar& word
processors) SM/ or gM/ for w#ic# t#e .2. and*or processing too!s are not genera!!& avai!ab!e)
and t#e mac#ine6generated 32M/ produced b& some word processors for output purposes on!&.
2#e :2it!e Page: means) for a printed boo9) t#e tit!e page itse!f) p!us suc# fo!!owing pages as are
needed to #o!d) !egib!&) t#e materia! t#is /icense re;uires to appear in t#e tit!e page.
-or wor9s in formats w#ic# do not #ave an& tit!e page as suc#) :2it!e Page: means t#e te7t near
t#e most prominent appearance of t#e wor9Ss tit!e) preceding t#e beginning of t#e bod& of t#e
te7t.
"% AE/BA6I: C+PEIDG
eou ma& cop& and distribute t#e .ocument in an& medium) eit#er commercia!!& or
noncommercia!!&) provided t#at t#is /icense) t#e cop&rig#t notices) and t#e !icense notice sa&ing
t#is /icense app!ies to t#e .ocument are reproduced in a!! copies) and t#at &ou add no ot#er
conditions w#atsoever to t#ose of t#is /icense. eou ma& not use tec#nica! measures to obstruct
or contro! t#e reading or furt#er cop&ing of t#e copies &ou ma9e or distribute. 3owever) &ou ma&
accept compensation in e7c#ange for copies. If &ou distribute a !arge enoug# number of copies
&ou must a!so fo!!ow t#e conditions in section I.
eou ma& a!so !end copies) under t#e same conditions stated above) and &ou ma& pub!ic!& disp!a&
copies.
9% C+PEIDG ID C7AD6I6E
If &ou pub!is# printed copies of t#e .ocument numbering more t#an 0%%) and t#e .ocumentSs
!icense notice re;uires Cover 2e7ts) &ou must enc!ose t#e copies in covers t#at carr&) c!ear!& and
!egib!&) a!! t#ese Cover 2e7ts: -ront6Cover 2e7ts on t#e front cover) and 8ac96Cover 2e7ts on t#e
bac9 cover. 8ot# covers must a!so c!ear!& and !egib!& identif& &ou as t#e pub!is#er of t#ese
copies. 2#e front cover must present t#e fu!! tit!e wit# a!! words of t#e tit!e e;ua!!& prominent and
visib!e. eou ma& add ot#er materia! on t#e covers in addition. Cop&ing wit# c#anges !imited to
t#e covers) as !ong as t#e& preserve t#e tit!e of t#e .ocument and satisf& t#ese conditions) can
be treated as verbatim cop&ing in ot#er respects.
If t#e re;uired te7ts for eit#er cover are too vo!uminous to fit !egib!&) &ou s#ou!d put t#e first
ones !isted 'as man& as fit reasonab!&( on t#e actua! cover) and continue t#e rest onto
adMacent pages.
If &ou pub!is# or distribute ?pa;ue copies of t#e .ocument numbering more t#an 0%%) &ou must
eit#er inc!ude a mac#ine6readab!e 2ransparent cop& a!ong wit# eac# ?pa;ue cop&) or state in or
wit# eac# ?pa;ue cop& a pub!ic!&6accessib!e computer6networ9 !ocation containing a comp!ete
2ransparent cop& of t#e .ocument) free of added materia!) w#ic# t#e genera! networ96using
pub!ic #as access to down!oad anon&mous!& at no c#arge using pub!ic6standard networ9
protoco!s. If &ou use t#e !atter option) &ou must ta9e reasonab!& prudent steps) w#en &ou begin
distribution of ?pa;ue copies in ;uantit&) to ensure t#at t#is 2ransparent cop& wi!! remain t#us
accessib!e at t#e stated !ocation unti! at !east one &ear after t#e !ast time &ou distribute an
?pa;ue cop& 'direct!& or t#roug# &our agents or retai!ers( of t#at edition to t#e pub!ic.
It is re;uested) but not re;uired) t#at &ou contact t#e aut#ors of t#e .ocument we!! before
redistributing an& !arge number of copies) to give t#em a c#ance to provide &ou wit# an updated
version of t#e .ocument.
B% :+5I2ICA6I+DS
eou ma& cop& and distribute a Modified Version of t#e .ocument under t#e conditions of sections
$ and I above) provided t#at &ou re!ease t#e Modified Version under precise!& t#is /icense) wit#
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
t#e Modified Version fi!!ing t#e ro!e of t#e .ocument) t#us !icensing distribution and modification
of t#e Modified Version to w#oever possesses a cop& of it. In addition) &ou must do t#ese t#ings
in t#e Modified Version:
4. ,se in t#e 2it!e Page 'and on t#e covers) if an&( a tit!e distinct from t#at of t#e .ocument) and
from t#ose of previous versions 'w#ic# s#ou!d) if t#ere were an&) be !isted in t#e 3istor&
section of t#e .ocument(. eou ma& use t#e same tit!e as a previous version if t#e origina!
pub!is#er of t#at version gives permission.
-. /ist on t#e 2it!e Page) as aut#ors) one or more persons or entities responsib!e for aut#ors#ip
of t#e modifications in t#e Modified Version) toget#er wit# at !east five of t#e principa! aut#ors
of t#e .ocument 'a!! of its principa! aut#ors) if it #as !ess t#an five(.
. State on t#e 2it!e page t#e name of t#e pub!is#er of t#e Modified Version) as t#e pub!is#er.
3. Preserve a!! t#e cop&rig#t notices of t#e .ocument.
I. Add an appropriate cop&rig#t notice for &our modifications adMacent to t#e ot#er cop&rig#t
notices.
". Inc!ude) immediate!& after t#e cop&rig#t notices) a !icense notice giving t#e pub!ic permission
to use t#e Modified Version under t#e terms of t#is /icense) in t#e form s#own in t#e
Addendum be!ow.
p. Preserve in t#at !icense notice t#e fu!! !ists of Invariant Sections and re;uired Cover 2e7ts
given in t#e .ocumentSs !icense notice.
/. Inc!ude an una!tered cop& of t#is /icense.
M. Preserve t#e section entit!ed :3istor&:) and its tit!e) and add to it an item stating at !east t#e
tit!e) &ear) new aut#ors) and pub!is#er of t#e Modified Version as given on t#e 2it!e Page. If
t#ere is no section entit!ed :3istor&: in t#e .ocument) create one stating t#e tit!e) &ear)
aut#ors) and pub!is#er of t#e .ocument as given on its 2it!e Page) t#en add an item
describing t#e Modified Version as stated in t#e previous sentence.
+. Preserve t#e networ9 !ocation) if an&) given in t#e .ocument for pub!ic access to a
2ransparent cop& of t#e .ocument) and !i9ewise t#e networ9 !ocations given in t#e .ocument
for previous versions it was based on. 2#ese ma& be p!aced in t#e :3istor&: section. eou ma&
omit a networ9 !ocation for a wor9 t#at was pub!is#ed at !east four &ears before t#e
.ocument itse!f) or if t#e origina! pub!is#er of t#e version it refers to gives permission.
?. In an& section entit!ed :Ac9now!edgements: or :.edications:) preserve t#e sectionSs tit!e) and
preserve in t#e section a!! t#e substance and tone of eac# of t#e contributor
ac9now!edgements and*or dedications given t#erein.
P. Preserve a!! t#e Invariant Sections of t#e .ocument) una!tered in t#eir te7t and in t#eir tit!es.
Section numbers or t#e e;uiva!ent are not considered part of t#e section tit!es.
H. .e!ete an& section entit!ed :4ndorsements:. Suc# a section ma& not be inc!uded in t#e
Modified Version.
5. +. .o not retit!e an& e7isting section as :4ndorsements: or to conf!ict in tit!e wit# an&
Invariant Section.
S. If t#e Modified Version inc!udes new front6matter sections or appendices t#at ;ua!if& as
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 85
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Secondar& Sections and contain no materia! copied from t#e .ocument) &ou ma& at &our
option designate some or a!! of t#ese sections as invariant. 2o do t#is) add t#eir tit!es to t#e
!ist of Invariant Sections in t#e Modified VersionSs !icense notice. 2#ese tit!es must be distinct
from an& ot#er section tit!es.
eou ma& add a section entit!ed :4ndorsements:) provided it contains not#ing but endorsements
of &our Modified Version b& various parties66for e7amp!e) statements of peer review or t#at t#e
te7t #as been approved b& an organiAation as t#e aut#oritative definition of a standard.
eou ma& add a passage of up to five words as a -ront6Cover 2e7t) and a passage of up to $L
words as a 8ac96Cover 2e7t) to t#e end of t#e !ist of Cover 2e7ts in t#e Modified Version. ?n!&
one passage of -ront6Cover 2e7t and one of 8ac96Cover 2e7t ma& be added b& 'or t#roug#
arrangements made b&( an& one entit&. If t#e .ocument a!read& inc!udes a cover te7t for t#e
same cover) previous!& added b& &ou or b& arrangement made b& t#e same entit& &ou are acting
on be#a!f of) &ou ma& not add anot#er1 but &ou ma& rep!ace t#e o!d one) on e7p!icit permission
from t#e previous pub!is#er t#at added t#e o!d one.
2#e aut#or's( and pub!is#er's( of t#e .ocument do not b& t#is /icense give permission to use
t#eir names for pub!icit& for or to assert or imp!& endorsement of an& Modified Version.
F% C+:BIDIDG 5+C7:ED6S
eou ma& combine t#e .ocument wit# ot#er documents re!eased under t#is /icense) under t#e
terms defined in section K above for modified versions) provided t#at &ou inc!ude in t#e
combination a!! of t#e Invariant Sections of a!! of t#e origina! documents) unmodified) and !ist
t#em a!! as Invariant Sections of &our combined wor9 in its !icense notice.
2#e combined wor9 need on!& contain one cop& of t#is /icense) and mu!tip!e identica! Invariant
Sections ma& be rep!aced wit# a sing!e cop&. If t#ere are mu!tip!e Invariant Sections wit# t#e
same name but different contents) ma9e t#e tit!e of eac# suc# section uni;ue b& adding at t#e
end of it) in parent#eses) t#e name of t#e origina! aut#or or pub!is#er of t#at section if 9nown) or
e!se a uni;ue number. Ma9e t#e same adMustment to t#e section tit!es in t#e !ist of Invariant
Sections in t#e !icense notice of t#e combined wor9.
In t#e combination) &ou must combine an& sections entit!ed :3istor&: in t#e various origina!
documents) forming one section entit!ed :3istor&:1 !i9ewise combine an& sections entit!ed
:Ac9now!edgements:) and an& sections entit!ed :.edications:. eou must de!ete a!! sections
entit!ed :4ndorsements.:
K% C+00EC6I+DS +2 5+C7:ED6S
eou ma& ma9e a co!!ection consisting of t#e .ocument and ot#er documents re!eased under t#is
/icense) and rep!ace t#e individua! copies of t#is /icense in t#e various documents wit# a sing!e
cop& t#at is inc!uded in t#e co!!ection) provided t#at &ou fo!!ow t#e ru!es of t#is /icense for
verbatim cop&ing of eac# of t#e documents in a!! ot#er respects.
eou ma& e7tract a sing!e document from suc# a co!!ection) and distribute it individua!!& under t#is
/icense) provided &ou insert a cop& of t#is /icense into t#e e7tracted document) and fo!!ow t#is
/icense in a!! ot#er respects regarding verbatim cop&ing of t#at document.
M% AGG/EGA6I+D WI6H ID5EPED5ED6 W+/\S
A compi!ation of t#e .ocument or its derivatives wit# ot#er separate and independent documents
or wor9s) in or on a vo!ume of a storage or distribution medium) does not as a w#o!e count as a
Modified Version of t#e .ocument) provided no compi!ation cop&rig#t is c!aimed for t#e
compi!ation. Suc# a compi!ation is ca!!ed an :aggregate:) and t#is t#is /icense does not app!& to
t#e ot#er se!f6contained wor9s t#us compi!ed wit# t#e .ocument) on account of t#eir being t#us
compi!ed) if t#e& are not t#emse!ves derivative wor9s of t#e .ocument. If t#e Cover 2e7t
re;uirement of section I is app!icab!e to t#ese copies of t#e .ocument) t#en if t#e .ocument is
!ess t#an one ;uarter of t#e entire aggregate) t#e .ocumentSs Cover 2e7ts ma& be p!aced on
covers t#at surround on!& t#e .ocument wit#in t#e aggregate. ?t#erwise t#e& must appear on
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
covers around t#e w#o!e aggregate.
P% 6/ADS0A6I+D
2rans!ation is considered a 9ind of modification) so &ou ma& distribute trans!ations of t#e
.ocument under t#e terms of section K. 5ep!acing Invariant Sections wit# trans!ations re;uires
especia! permission from t#eir cop&rig#t #o!ders) but &ou ma& inc!ude trans!ations of some or a!!
Invariant Sections in addition to t#e origina! versions of t#ese Invariant Sections. eou ma& inc!ude
a trans!ation of t#is /icense provided t#at &ou a!so inc!ude t#e origina! 4ng!is# version of t#is
/icense. In case of a disagreement between t#e trans!ation and t#e origina! 4ng!is# version of
t#is /icense) t#e origina! 4ng!is# version wi!! prevai!.
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 87
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Q% 6E/:IDA6I+D
eou ma& not cop&) modif&) sub!icense) or distribute t#e .ocument e7cept as e7press!& provided
for under t#is /icense. An& ot#er attempt to cop&) modif&) sub!icense or distribute t#e .ocument
is void) and wi!! automatica!!& terminate &our rig#ts under t#is /icense. 3owever) parties w#o
#ave received copies) or rig#ts) from &ou under t#is /icense wi!! not #ave t#eir !icenses
terminated so !ong as suc# parties remain in fu!! comp!iance.
*#% 2767/E /EAISI+DS +2 6HIS 0ICEDSE
2#e -ree Software -oundation ma& pub!is# new) revised versions of t#e +, -ree .ocumentation
/icense from time to time. Suc# new versions wi!! be simi!ar in spirit to t#e present version) but
ma& differ in detai! to address new prob!ems or concerns. See #ttp:**www.gnu.org*cop&!eft*.
4ac# version of t#e /icense is given a distinguis#ing version number. If t#e .ocument specifies
t#at a particu!ar numbered version of t#is /icense :or an& !ater version: app!ies to it) &ou #ave
t#e option of fo!!owing t#e terms and conditions eit#er of t#at specified version or of an& !ater
version t#at #as been pub!is#ed 'not as a draft( b& t#e -ree Software -oundation. If t#e
.ocument does not specif& a version number of t#is /icense) &ou ma& c#oose an& version ever
pub!is#ed 'not as a draft( b& t#e -ree Software -oundation.
3ow to use t#is /icense for &our documents.
2o use t#is /icense in a document &ou #ave written) inc!ude a cop& of t#e /icense in t#e
document and put t#e fo!!owing cop&rig#t and !icense notices Must after t#e tit!e page:
Cop&rig#t 'c( e4A5 e?,5 +AM4.
Permission is granted to cop&) distribute and*or modif& t#is document
under t#e terms of t#e +, -ree .ocumentation /icense) Version 0.0
or an& !ater version pub!is#ed b& t#e -ree Software -oundation1
wit# t#e Invariant Sections being /IS2 234I5 2I2/4S) wit# t#e
-ront6Cover 2e7ts being /IS2) and wit# t#e 8ac96Cover 2e7ts being /IS2.
A cop& of t#e !icense is inc!uded in t#e section entit!ed :+,
-ree .ocumentation /icense:.
If &ou #ave no Invariant Sections) write :wit# no Invariant Sections: instead of sa&ing w#ic#
ones are invariant. If &ou #ave no -ront6Cover 2e7ts) write :no -ront6Cover 2e7ts: instead of
:-ront6Cover 2e7ts being /IS2:1 !i9ewise for 8ac96Cover 2e7ts.
If &our document contains nontrivia! e7amp!es of program code) we recommend re!easing t#ese
e7amp!es in para!!e! under &our c#oice of free software !icense) suc# as t#e +, enera! Pub!ic
/icense) to permit t#eir use in free software.
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”
Comitê de Incentivo a Produção do Software Gratuito e Alternativo CIPSGA
ComitQ de Incentivo a Produção do
Software ratuito e A!ternativo
Fundado em 29 de janeiro de 1999.
0u .iretoria
.Ma!ma Va!ois -i!#o
D1@A:8@ EBA5C:1D8
dva!ois@c7posta!.com
"osB /uiA +unes Po&ares Pau!o 5oberto 5ibeiro uimarães
.iretor Administrativo .iretor Instituciona!
CIPSA
5ua Professora 4ster de Me!o) numero $%$)
Parte) 8enfica) 5io de "aneiro) 5") C4P. $%JI%6%0%1
2e!efone '-a7*.ados(: %$06LLNK$%01
e6mai!: administracao@cipsga.org.br
C+P": %I0OJN0K6%%%0*O%
Curso de Aplicaçoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $
P)&ina 89
“Com certeza a melhor apostila PHP – Reprodução permitida desde que mantido o conteúdo e fonte originais”