0 оценок0% нашли этот документ полезным (0 голосов)
71 просмотров89 страниц
O documento apresenta um curso completo sobre desenvolvimento web com PHP. O curso aborda tópicos como: introdução ao PHP e suas funcionalidades; envio de dados para o servidor HTTP; formulários HTML; instalação e configuração do PHP, MySQL e Apache; sintaxe básica de PHP; tipos de dados; estruturas de controle; funções; classes e objetos; acesso a bancos de dados MySQL e PostgreSQL; manipulação de arquivos; envio de e-mail. O curso também inclui apêndices com funções para tratamento de strings e
O documento apresenta um curso completo sobre desenvolvimento web com PHP. O curso aborda tópicos como: introdução ao PHP e suas funcionalidades; envio de dados para o servidor HTTP; formulários HTML; instalação e configuração do PHP, MySQL e Apache; sintaxe básica de PHP; tipos de dados; estruturas de controle; funções; classes e objetos; acesso a bancos de dados MySQL e PostgreSQL; manipulação de arquivos; envio de e-mail. O curso também inclui apêndices com funções para tratamento de strings e
O documento apresenta um curso completo sobre desenvolvimento web com PHP. O curso aborda tópicos como: introdução ao PHP e suas funcionalidades; envio de dados para o servidor HTTP; formulários HTML; instalação e configuração do PHP, MySQL e Apache; sintaxe básica de PHP; tipos de dados; estruturas de controle; funções; classes e objetos; acesso a bancos de dados MySQL e PostgreSQL; manipulação de arquivos; envio de e-mail. O curso também inclui apêndices com funções para tratamento de strings e
Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais
Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA
Curso de Aplicaoes WEB em PHP Autor: Mauricio Vivas mauricio@cipsga.org.br un!o de "### Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 1 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Curso de Aplicaoes WEB em PHP Comite de Incentivo a Produo 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 permisso para copiar) distribuir e*ou modificar este documento sob os termos da +, -ree .ocumentation /icense) verso 0.0 ou ;ua!;uer outra verso posterior pub!icada pe!a -ree Software -oundation1 sem obrigatoriedade de Se<es Invariantes na abertura e ao fina! dos te7tos. ,ma copia da !icena deve ser inc!u=da na seo intitu!ada +, -ree .ocumentation /icense. Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA ndice geral 01. INTRODUO................................................................................................................................8 CLIENT-SIDE SCRIPTS 8 SERVER-SIDE SCRIPTS 8 O QUE PHP? 9 O QUE PODE SER FEITO COM PHP? 9 COMO SURGIU A LINGUAGEM PHP? 9 02. ENVIANDO DADOS PARA O SERVIDOR HTTP.........................................................................10 O MTODO GET 10 HEADERS 11 O MTODO POST 11 UTILIZANDO GET E POST 12 03. FORMULRIOS HTML.................................................................................................................12 DEFININDO UM FORMULRIO 12 A TAG <INPUT 1! CAMPO DE TE"TO 1! Parmetros !" CAMPO DE TE"TO COM MSCARA 1! Parmetros !# CHEC#$O" 1% Parmetros !# RADIO $UTTON 1% Parmetros !# SU$MIT $UTTON 1% Parmetros !# RESET $UTTON 1& Parmetros !$ $UTTON 1& Parmetros !$ TE"TAREA 1& Parmetros !$ SELECT 1& Parmetros !% UPLOAD DE ARQUIVOS 1' Parmetros !% 04. INSTALAO E CONFIGURAO EM AMBIENTE WINDOWS................................................1 SERVIDOR APACHE 1' PHP 1( M)SQL 18 0!. INSTALAO E CONFIGURAO EM AMBIENTE LINU" REDHAT.......................................18 *DISPON+VEL NA PR,"IMA VERS-O. 18 0. SINTA"E BSICA........................................................................................................................1# DELIMITANDO O C,DIGO PHP19 SEPARADOR DE INSTRU/0ES 19 NOMES DE VARIVEIS 19 COMENTRIOS 19 Coment&rios de uma linha '( Coment&rios de mais de uma linha '( Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 3 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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% Coer5es '# 6ransformao e7pl8cita de tipos '$ Com a funo sett1pe '$ 08. OPERADORES.............................................................................................................................2 ARITMTICOS 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 parmetros por refer=ncia "% 0rgumentos com >alores pr?@definidos *default+ "A CONTE"TO !( ESCOPO !8 11. VARIVEIS E CONSTANTES......................................................................................................3# DECLARA/-O DE UMA VARIVEL !9 O MODIFICADOR STATIC !9 VARIVEIS VARIVEIS %0 VARIVEIS ENVIADAS PELO NAVEGADOR %0 BRCencode #( Btilizando arra1s #! VARIVEIS DE AM$IENTE %1 VERIFICANDO O TIPO DE UMA VARIVEL %1 -uno que retorna o tipo da >ari&>el #! Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA -un5es que testam o tipo da >ari&>el #' DESTRUINDO UMA VARIVEL %2 VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR %2 0 funo isset #' 0 funo empt1 #" CONSTANTES PR-DEFINIDAS %! DEFININDO CONSTANTES %! 12. CLASSES E OB&ETOS................................................................................................................43 CLASSE %! O$;ETO %% A VARIVEL <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 e7ecuo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 5 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais ESCREVENDO EM UM ARQUIVO &9 E"EMPLO &9 UPLOADS COM FORMULRIOS 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 GENRICAS '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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 NUMRICOS (% DATA E HORA (% STRINGS (& NOTAS DO AUTOR............................................................................................................................$ CONTROLE DE VERS%ES................................................................................................................$$ GNU FREE DOCUMENTATION LICENSE.........................................................................................$8
Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 7 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais #*% Introduo Client$Side Scripts So 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 so imagens e te7tos ;ue mudam com o passar do mouse. ?s scripts c!ient6side so 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!iAao comum B na construo de interfaces dinCmicas e D!evesE. Figura 1. Funcionamento de scripts client-side Server$Side Scripts ?s scripts server6side so respons>veis pe!a criao 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. Requisio Normal Figura 3. Requisio de pgina dinmica + ,ue - PHP. P3P B uma !inguagem ;ue permite criar sites F48 dinCmicos) possibi!itando uma interao com o usu>rio atravBs de formu!>rios) parCmetros da ,5/ e !in9s. A diferena de P3P com re!ao 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 no 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 informao 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 servios 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 no 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 verso 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 mudana 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 verso I. ? !anamento 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 informao. A!Bm das mudanas referentes a sinta7e e novos recursos de programao) o P3PK trou7e como novidade um otimiAador c#amado Pend) ;ue permite a e7ecuo muito mais r>pida de scripts P3P. A empresa ;ue produA o Pend promete para este ano o !anamento de um compi!ador de P3P. CGdigos compi!ados sero e7ecutados mais rapidamente) a!Bm de proteger o fonte da ap!icao. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 9 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 so 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 no sero abordados neste curso. + m-todo GE6 A especificao do protoco!o 322P*%.J 'a primeira imp!ementao do 322P( possu=a a definio do mBtodo 42) uti!iAado pe!o browser para so!icitar um documento espec=fico. Por e7emp!o: a seguinte re;uisio 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;uisio 42 inicia com a pa!avra 42) inc!ui o documento so!icitado e encerra com a combinao dos caracteres carriage return e line eed. Para um me!#or entendimento) vocQ pode faAer uma re;uisio 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 diferena 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;uisio 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA '... p>gina so!icitada ...( Connection c!osed b& foreign #ost. +o e7emp!o so passados dois parCmetros: id e tipo. 4sses parCmetros esto 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 esto envo!vidas 'sen#a) por e7emp!o(. Headers A verso 0.% do protoco!o 322P trou7e boas inova<es ao mesmo. ,ma de!as foi a criao de #eaders nas mensagens de re;uisio e de resposta. ?s #eaders so informa<es trocadas entre o navegador e o servidor de maneira transparente ao usu>rio) e podem conter dados sobre o tipo e a verso do navegador) a p>gina de onde partiu a re;uisio '!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;uisio de ar;uivos) ;ue reso!veu os principais prob!emas do mBtodo 42. + m-todo P+S6 AtravBs da uti!iAao 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 cone7o 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 11 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 ento B iniciado o corpo da mensagem) no formato ur!encoded. ?bviamente o usu>rio no 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 digitao de um endereo 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 no precisa se preocupar com a codificao dos dados. A uti!iAao 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 marcao) 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 definio 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!uso de mais de um formu!>rio num mesmo #tm!. As tags citadas so: [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 esto 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 sero 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA A ta& <input= Muitos e!ementos de um formu!>rio #tm! so 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 diferena ;ue neste caso os dados digitados so substitu=dos por asteriscos) e por isso so os mais recomendados para campos ;ue devam conter sen#as. Z importante sa!ientar ;ue nen#uma criptografia B uti!iAada. Apenas no 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 opo. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 13 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 opo. 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 seo DactionE da definio do formu!>rio Par?metros@ Aalue o te7to ;ue aparecer> no corpo do boto. /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 boto 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 boto. Button Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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!iAao) no produA efeito a!gum Par?metros@ Aalue ^ o te7to ;ue aparecer> no corpo do boto. 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 so 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 no ;uebre na te!a e nem ;uando enviado ao servidor. Aalue ? e!emento do tipo te7tarea no 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 no #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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 15 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 boto) ;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% Instalao e confi&urao 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!ao do Apac#e B bastante simp!es) simi!ar a ;ua!;uer ap!icao windows. A @nica restrio B ;ue o winsoc9$ deve estar insta!ado no sistema. Se no 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 configurao do servidor) atravBs do ar;uivo #ttpd.conf. 2odas as configura<es esto comentadas. ? m=nimo ;ue deve ser configurado B o diretGrio onde os documentos estaro) atravBs da opo .ocument5oot. 8asta procurar a opo e escrever o nome do diretGrio em seguida) como no e7emp!o: .ocument5oot :C:`vivas`: ,ma outra configurao b>sica B a .irector&Inde7) ;ue informa ao servidor ;uais os ar;uivos sero 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!iAao 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 endereo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA PHP ? P3P pode ser conseguido em Dwww.p#p.netE) e sua insta!ao tambBm B simp!es. 8asta descompactar os ar;uivos para o diretGrio Dc:`p#pIE e editar o ar;uivo de configurao. ? 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 esto 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 configurao do servidor Apac#e) necess>ria para ;ue este recon#ea 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!ao 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 informao: [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!ao tambBm B bastante simp!es) tambBm no mode!os de insta!ao de ;ua!;uer ap!icativo para Findows. As configura<es necess>rias so re!ativas a segurana) e e7igem um con#ecimento mais avanado de administrao de servidores. Como essa insta!ao destina6se apenas a praticar o P3P) no B necess>rio faAer muitas a!tera<es na segurana) bastando apenas saber como adicionar usu>rios. Para isto) basta uti!iAar o comando 5A+2) ;ue tem a seguinte sinta7e: Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 17 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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!iAao 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% Instalao e confi&urao em am'iente linu> /edHat G5isponHvel na prI>ima versoJ Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 DabreviaoE do primeiro. Para uti!iA>6!o) B necess>rio #abi!itar a opo short-tags na configurao 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 configurao php.ini. Separador de instruLes 4ntre cada instruo em P3P B preciso uti!iAar o ponto6e6v=rgu!a) assim como em C) Per! e outras !inguagens mais con#ecidas. +a @!tima instruo do b!oco de script no 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 so 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 so formados por !etras mai@scu!as. Coment)rios Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 19 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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) no 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 no 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 impresso) 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 e7ecuo do script. Por este motivo no 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 e7ecuo. Ainda assim) B permitido converter os va!ores de um tipo para outro deseMado) uti!iAando o t!pecasting ou a funo 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 diferena 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 so 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 21 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 e7ceo 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!ao #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 so as c#aves de acesso. Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Va!e ressa!tar ;ue os =ndices podem ser va!ores de ;ua!;uer tipo e no somente inteiros. Inc!usive) se os =ndices forem todos inteiros) estes no 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 so uti!iAadas em P3P para rea!iAar atribui<es m@!tip!as. AtravBs de !istas B poss=ve! atribuir va!ores ;ue esto 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 so atribu=dos ]s vari>veis da !ista os e!ementos do arra& ;ue possuem =ndices inteiros e no 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 e7ecuo 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 no foi atribu=do va!or) pois no arra& no e7iste e!emento com =ndice % 'Aero(. ?utro deta!#e importante B ;ue o va!or DtresE foi atribu=do ] vari>ve! id) e no a ib) pois seu =ndice B I) o mesmo ;ue id na !ista. Por fim) vemos ;ue o va!or D!etraAE no foi atribu=do a e!emento a!gum da !ista pois seu =ndice no B inteiro. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 23 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais ?s =ndices da !ista servem apenas como referQncia ao interpretador P3P para rea!iAar as atribui<es) no podendo ser acessados de maneira a!guma pe!o programador. .e maneira diferente do arra&) uma !ista no 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!iAao de obMetos ser> mais deta!#ada mais ] frente. Booleanos P3P no 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. 6ransformao de tipos A transformao de tipos em P3P pode ser feita das seguintes maneiras: CoerLes 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 'coero(. Z interessante notar ;ue se o operando for uma vari>ve!) seu va!or no ser> a!terado. ? tipo para o ;ua! os va!ores dos operandos sero convertidos B determinado da seguinte forma: Se um dos operandos for f!oat) o outro ser> convertido para f!oat) seno) 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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. Seno) 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 6ransformao 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 so: '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 funo sett;pe A funo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 25 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA #P% +peradores Aritm-ticos SG podem ser uti!iAados ;uando os operandos so n@meros 'integer ou f!oat(. Se forem de outro tipo) tero seus va!ores convertidos antes da rea!iAao da operao. k adio 6 subtrao Y mu!tip!icao * diviso h mGdu!o de strin&s SG #> um operador e7c!usivo para strings: % concatenao de atri'uio 47iste um operador b>sico de atribuio e diversos derivados. Sempre retornam o va!or atribu=do. +o caso dos operadores derivados de atribuio) a operao B feita entre os dois operandos) sendo atribu=do o resu!tado para o primeiro. A atribuio B sempre por va!or) e no por referQncia. W atribuio simp!es kW atribuio com adio 6W atribuio com subtrao YW atribuio com mu!tip!icao *W atribuio com diviso hW atribuio com mGdu!o .W atribuio com concatenao 47emp!o: ia W O1 Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 27 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais ia kW $1 ** ia passa a conter o va!or J Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 no 'inverso( [[ 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 no 'inverso( 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. Comparao As compara<es so feitas entre os va!ores contidos nas vari>veis) e no 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 29 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais E>presso condicional 47iste um operador de se!eo ;ue B tern>rio. -unciona assim: 'e7pressao0(V'e7pressao$(:' e7pressaoI( o interpretador P3P ava!ia a primeira e7presso. Se e!a for verdadeira) a e7presso retorna o va!or de e7presso$. Seno) retorna o va!or de e7pressoI. 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 so comuns para as !inguagens de programao 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 funo. 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 faa parte do conte7to deseMado. 8!ocos em P3P so de!imitados pe!os caracteres DbE e DdE. A uti!iAao dos de!imitadores de b!oco em uma parte ;ua!;uer do cGdigo no re!acionada com os comandos citados ou fun<es no produAir> efeito a!gum) e ser> tratada norma!mente pe!o interpretador. 47emp!o: Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 seleo 2ambBm c#amados de condicionais) os comandos de se!eo permitem e7ecutar comandos ou b!ocos de comandos com base em testes feitos durante a e7ecuo. if ? mais trivia! dos comandos condicionais B o if. 4!e testa a condio e e7ecuta o comando indicado se o resu!tado for true 'va!or diferente de Aero(. 4!e possui duas sinta7es: if 'e7presso( comando1 if 'e7presso(: 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 e7presso retornar o va!or fa!se 'Aero(. Suas duas sinta7es so: if 'e7presso( comando1 e!se comando1 if 'e7presso(: comando1 . . . comando1 e!se Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 31 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 funo 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!iAao 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 e7presso. -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 no 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 33 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 sero e7ecutados. Se ii for igua! a 0) os dois @!timos DprintE sero 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 repetio w!ile ? w#i!e B o comando de repetio '!ao( mais simp!es. 4!e testa uma condio e e7ecuta um comando) ou um b!oco de comandos) atB ;ue a condio 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 e7presso sG B testada a cada veA ;ue o b!oco de instru<es termina) a!Bm do teste inicia!. Se o va!or da e7presso passar a ser fa!se no meio do b!oco de instru<es) a e7ecuo segue atB o fina! do b!oco. Se no teste inicia! a condio for ava!iada como fa!se) o b!oco de comandos no 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA do%%% w!ile ? !ao do..w#i!e funciona de maneira bastante seme!#ante ao w#i!e) com a simp!es diferena ;ue a e7presso B testada ao fina! do b!oco de comandos. ? !ao 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 !ao mais comp!e7o B o for. Para os ;ue programam em C) Ckk ou "ava) a assimi!ao do funcionamento do for B natura!. Mas para a;ue!es ;ue esto acostumados a !inguagens como Pasca!) #> uma grande mudana para o uso do for. As duas sinta7es permitidas so: 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: Iniciali8ao: comando ou se;uencia de comandos a serem rea!iAados antes do inicio do !ao. Serve para inicia!iAar vari>veis. Condio: 47presso boo!eana ;ue define se os comandos ;ue esto dentro do !ao sero e7ecutados ou no. 4n;uanto a e7presso for verdadeira 'va!or diferente de Aero( os comandos sero e7ecutados. Incremento: Comando e7ecutado ao fina! de cada e7ecuo do !ao. ,m comando for funciona de maneira seme!#ante a um w#i!e escrito da seguinte forma: Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 35 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 !aos de do) for e w#i!e) a!Bm do uso M> visto no comando switc#. Ao encontrar um brea9 dentro de um desses !aos) o interpretador P3P para imediatamente a e7ecuo do !ao) 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 !ao w#i!e tem uma condio para seu tBrmino norma! 'i7 [W %() mas foi uti!iAado o brea9 para o caso de um tBrmino no previsto no in=cio do !ao. Assim o interpretador seguir> para o comando seguinte ao !ao. Continue ? comando continue tambBm deve ser uti!iAado no interior de !aos) e funciona de maneira seme!#ante ao brea9) com a diferena ;ue o f!u7o ao invBs de sair do !ao 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 !ao faA B testar se o resto da diviso 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 !ao seMam ignorados) seguindo para a prG7ima iterao. Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA *#% 2unLes 5efinindo funLes A sinta7e b>sica para definir uma funo B: function nomeSdaSfuno'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 funo. Como a c#ecagem de tipos em P3P B dinCmica) o tipo de retorno no deve ser dec!arado) sendo necess>rio ;ue o programador esteMa atento para ;ue a funo retorne o tipo deseMado. Z recomend>ve! ;ue esteMa tudo bem documentado para faci!itar a !eitura e compreenso do cGdigo. Para efeito de documentao) uti!iAa6se o seguinte formato de dec!arao de funo: tipo function nome_da_funcao'tipo arg0) tipo arg$) ...(1 4ste formato sG deve ser uti!iAado na documentao do script) pois o P3P no aceita a dec!arao de tipos. Isso significa ;ue em muitos casos o programador deve estar atento ao tipos dos va!ores passados como parCmetros) pois se no for passado o tipo esperado no B emitido nen#um a!erta pe!o interpretador P3P) M> ;ue este no testa os tipos. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 37 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Aalor de retorno 2oda funo pode opciona!mente retornar um va!or) ou simp!esmente e7ecutar os comandos e no retornar va!or a!gum. +o B poss=ve! ;ue uma funo retorne mais de um va!or) mas B permitido faAer com ;ue uma funo retorne um va!or composto) como !istas ou arra&s. Ar&umentos Z poss=ve! passar argumentos para uma funo. 4!es devem ser dec!arados !ogo apGs o nome da funo) entre parQnteses) e tornam6se vari>veis pertencentes ao escopo !oca! da funo. A dec!arao do tipo de cada argumento tambBm B uti!iAada apenas para efeito de documentao. 47emp!o: function imprime'ite7to(b ec#o ite7to1 d imprime'Dteste de fun<esE(1 Passa&em de par?metros por referncia +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!terao no 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 funo maisL B in@ti!) M> ;ue apGs a e7ecuo sair da funo 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 funo) 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 funo ir> traba!#ar na verdade com uma cGpia da vari>ve!. PorBm) se a passagem de parCmetros for feita por referQncia) toda a!terao ;ue a funo rea!iAar no va!or passado como parCmetro afetar> a vari>ve! ;ue o contBm. 3> duas maneiras de faAer com ;ue uma funo ten#a parCmetros passados por referQncia: indicando isso na dec!arao da funo) o ;ue faA com ;ue a pasagem de parCmetros sempre seMa assim1 e tambBm na prGpria c#amada da funo. +os dois casos uti!iAa6se o modificador DXE. VeMamos um e7emp!o ;ue i!ustra os dois casos: Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 39 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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!arao da funo. Y* maisL'ia) Xib(1 *Y A;ui as duas vari>veis tero 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 sero 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 funo 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 funo 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 funo no vai funcionar da maneira esperada) ocorrendo um erro no interpretador. A dec!arao 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 funo) ao iniciar a e7ecuo do b!oco ;ue contBm a imp!ementao da mesma B criado um novo conte7to) contendo as vari>veis dec!aradas dentro Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA do b!oco) ou seMa) todas as vari>veis uti!iAadas dentro da;ue!e b!oco sero e!iminadas ao tBrmino da e7ecuo da funo. Escopo ? escopo de uma vari>ve! em P3P define a poro 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! no pode ser uti!iAada no interior de uma funo sem ;ue #aMa uma dec!arao. 47emp!o: ivivas W D2estandoE1 function 2este'( b ec#o ivivas1 d 2este'(1 ? trec#o acima no produAir> sa=da a!guma) pois a vari>ve! ivivas B de escopo g!oba!) e no pode ser referida num escopo !oca!) mesmo ;ue no #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!arao 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 funo 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 ** no imprime nada d 2este'(1 Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 41 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais **% Aari)veis e Constantes 5eclarao de uma vari)vel Como a tipagem em P3P B dinCmica) as vari>veis no precisam ser dec!aradas. ,ma vari>ve! B inicia!iAada no momento em ;ue B feita a primeira atribuio. ? 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 no B perdido ;uando a e7ecuo do script dei7a esse escopo. VeMa o seguinte e7emp!o: function 2este'( b ia W %1 ec#o ia1 iakk1 d ? @!timo comando da funo B in@ti!) pois assim ;ue for encerrada a e7ecuo da funo a vari>ve! ia perde seu va!or. "> no e7emp!o seguinte) a cada c#amada da funo 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 e7ecuo da funo. +a prG7ima e7ecuo da funo) ao encontrar novamente a dec!arao 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!arao. 47emp!o: function 2este'( b ec#o :ia:1 static ia W %1 iakk1 d ? e7emp!o acima no produAir> sa=da a!guma. +a primeira e7ecuo da funo) a impresso ocorre antes da atribuio de um va!or ] funo) e portanto o conte@do de ia B nu!o 'string vaAia(. +as e7ecu<es seguintes da funo 2este'( a impresso ocorre antes da recuperao do Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA va!or de ia) e portanto nesse momento seu va!or ainda B nu!o. Para ;ue a funo 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 so vari>veis. Sua uti!iAao B feita atravBs do dup!o cifro '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 navegao feita pe!o usu>rio) B necess>rio ;ue o P3P possa enviar e receber informa<es para o software de navegao. A maneira de enviar informa<es) como M> foi visto anteriormente) gera!mente B atravBs de um comando de impresso) 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 espaos pe!o caracter DkE e todos os outros caracteres no a!fa6numBricos 'com e7ceo 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 funo) !eia o tGpico Dfun<esE. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 43 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 programao B uti!iAar a notao 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 notao: [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 opoes $) 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 verso 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 funo 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 no contar com a aMuda de a!gumas fun<es ;ue aMudam a verificar isso. A verificao pode ser feita de duas maneiras: 2uno ,ue retorna o tipo da vari)vel Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA 4sta funo 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 funo &ett;pe pode retornar as seguintes strings: DintegerE) Ddoub!eE) DstringE) Darra&E) DobMectE e un9nown t&peE. 2unLes ,ue testam o tipo da vari)vel So 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 no for usada posteriormente atravBs da funo unset) ;ue tem a seguinte assinatura: int unset'mi7ed var(1 A funo 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 no ser ;ue a c#amada seMa pe!a funo isset. Se a operao 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 funo isset e com a funo empt&. A funo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 45 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais fa!se em caso contr>rio. A funo empt; Possui a seguinte assinatura: int empt;'mi7ed var(1 4 retorna true se a vari>ve! no contiver um va!or 'no 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 verso do P3P) o Sistema ?peraciona! do servidor) o ar;uivo em e7ecuo) e diversas outras informa<es. Para ter acesso a todas as constantes prB6definidas) pode6se uti!iAar a funo p#pinfo'() ;ue e7ibe uma tabe!a contendo todas as constantes prB6definidas) assim como configura<es da m>;uina) sistema operaciona!) servidor #ttp e verso do P3P insta!ada. 5efinindo constantes Para definir constantes uti!iAa6se a funo define. ,ma veA definido) o va!or de uma constante no poder> mais ser a!terado. ,ma constante sG pode conter va!ores esca!ares) ou seMa) no pode conter nem um arra& nem um obMeto. A assinatura da funo define B a seguinte: int define'string nome_da_constante) mi7ed va!or(1 A funo retorna true se for bem6sucedida. VeMa um e7emp!o de sua uti!iAao 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA da uti!iAao de programao orientada a obMetos B poder usufruir do recurso de encapsu!amento de informao. Com o encapsu!amento o usu>rio de uma c!asse no precisa saber como e!a B imp!ementada) bastando para a uti!iAao con#ecer a interface) ou seMa) as fun<es dispon=veis. ,ma c!asse B um tipo) e portanto no 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 funo WWW Y* d d +'Oeto Como foi dito anteriormente) c!asses so tipos) e no podem ser atribu=das a vari>veis. Vari>veis do tipo de uma c!asse so 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 definio 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 funo desse obMeto na definio 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!iAao 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 no foi Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 47 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais ** inicia!iAada) e no 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 e7tenso 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 no B permitido uti!iAar #erana m@!tip!a) ou seMa) uma c!asse pode ser e7tenso 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 adio da vari>ve! inumero e a funo numero'(. Construtores ,m construtor B uma funo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA ,m construtor pode conter argumentos) ;ue so 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 no B automaticamente #erdado ;uando o construtor da c!asse derivada B c#amado. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 49 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais *9% DoLes de SC0 Introduo Huando os 8ancos de .ados 5e!acionais estavam sendo desenvo!vidos) foram criadas !inguagens destinadas ] sua manipu!ao. ? .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 padro SH/. A SH/ estabe!eceu6se como !inguagem padro de 8anco de .ados 5e!aciona!. SH/ apresenta uma sBrie de comandos ;ue permitem a definio dos dados) c#amada de ../ '.ata .efinition /anguage() composta entre outros pe!os comandos Create) ;ue B destinado a criao 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!ao de dados do tipo registro a registro. ?utra caracter=stica muito importante dispon=ve! em SH/ B sua capacidade de construo de vis<es) ;ue so formas de visua!iAarmos os dados na forma de !istagens independente das tabe!as e organiAao !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 so 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 criao de tabe!as no banco de dados ou mesmo de sua criao. 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 definio do tipo de atributo ' integer'n() c#ar'n() ... (. Comando 5rop 4ste comando e!imina a definio 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!eo +/5E/ BE : CritBrio de ordenao 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 51 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comando IDSE/6 Adiciona um ou v>rios registros a uma tabe!a. Isto B referido como consu!ta ane7ao. Sinta7e b>sica I+S452 I+2? destino a'campo0a) campo$a) ...UU(U VA/,4S 'va!or0a) va!or$a) ...U( A instruo 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 ] posio 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!iAao ;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 e7presso ;ue determina o va!or a ser inserido em um campo espec=fico nos registros atua!iAados. crit-rio 6 ,ma e7presso ;ue determina ;uais registros devem ser atua!iAados. SG os registros ;ue satisfaAem a e7presso so atua!iAados. 7P5A6E B especia!mente @ti! ;uando vocQ ;uer a!terar muitos registros ou ;uando os registros ;ue vocQ ;uer a!terar esto em v>rias tabe!as. VocQ pode a!terar v>rios campos ao mesmo tempo. 7P5A6E no gera um conMunto de resu!tados. Se vocQ ;uiser saber ;uais resu!tados sero a!terados) e7amine primeiro os resu!tados da consu!ta se!eo ;ue use os mesmos critBrios e ento e7ecute a consu!ta atua!iAao. 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA onde: ta'ela%V 6 ? nome opciona! da tabe!a da ;ua! os registros so e7c!u=dos. ta'ela 6 ? nome da tabe!a da ;ua! os registros so e7c!u=dos. crit-rio 6 ,ma e7presso ;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 instruo .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 so 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 esto em uma re!ao um por v>rios com outras tabe!as. ?pera<es de e7c!uso em cascata faAem com ;ue os registros das tabe!as ;ue esto no !ado :v>rios: da re!ao seMam e7c!u=dos ;uando os registros correspondentes do !ado :um: da re!ao so 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!ao. 47c!uir um registro em C!ientes faA com ;ue os registros correspondentes em Pedidos seMam e7c!u=dos se a opo de e7c!uso em cascata for especificada. ? 5E0E6E e7c!ui registros inteiros e no apenas dados em campos espec=ficos. Se vocQ ;uiser e7c!uir va!ores de um campo espec=fico) crie uma consu!ta atua!iAao ;ue mude os va!ores para +u!!. ApGs remover os registros usando uma consu!ta e7c!uso) vocQ no poder> desfaAer a operao. Se ;uiser saber ;uais ar;uivos foram e7c!u=dos) primeiro e7amine os resu!tados de uma consu!ta se!eo ;ue use o mesmo critBrio e ento) e7ecute a consu!ta e7c!uso. 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 cone7o. Para isso) deve ser uti!iAado o comando m&s;!_connect) ou o m&s;!_pconnect. A diferena entre os dois comandos B ;ue o m&s;!_pconnect estabe!ece uma cone7o permanente) ou seMa) ;ue no B encerrada ao fina! da e7ecuo do script. As assinaturas dos dois comandos so 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 53 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais ? va!or de retorno B um inteiro ;ue identifica a cone7o) ou fa!so se a cone7o fa!#ar. Antes de tentar estabe!ecer uma cone7o) o interpretador P3P verifica se M> e7iste uma cone7o estabe!ecida com o mesmo #ost) o mesmo !ogin e a mesma sen#a. Se e7istir) o identificador desta cone7o B retornado. Seno) uma nova cone7o B criada. ,ma cone7o estabe!ecida com o comando m&s;!_connect B encerrada ao fina! da e7ecuo 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 cone7oU (1 Se o identificador no for fornecido) a @!tima cone7o estabe!ecida ser> encerrada. IMP?52A+24: o comando m&s;!_c!ose no encerra cone7<es estabe!ecidas com o comando m&s;!_pconnect. Selecionando a 'ase de dados .epois de estabe!ecida a cone7o) 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 cone7o no for fornecido) a @!tima cone7o 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 e7presso SH/ a ser e7ecutada) sem o ponto6e6v=rgu!a no fina!) e cone7ao B o identificador da cone7o 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 no 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 e7presso SH/ for incorreta) e diferente de Aero se for correta. +o caso de uma e7presso S4/4C2) as !in#as retornadas so 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 sero 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 so os nomes dos campos. A e7ecuo 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 diferena ;ue os =ndices do arra& so 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 posio indicada por esse ponteiro deve ser uti!iAada a funo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 55 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Esta'elecendo cone>Les Para acessar bases de dados num servidor Postgres) B necess>rio antes estabe!ecer uma cone7o. Para isso) deve ser uti!iAado o comando pg_connect) ou o pg_pconnect. A diferena entre os dois comandos B ;ue o pg_pconnect estabe!ece uma cone7o permanente) ou seMa) ;ue no B encerrada ao fina! da e7ecuo do script. As assinaturas dos dois comandos so 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 cone7o) ou fa!so se a cone7o fa!#ar. ,ma cone7o estabe!ecida com o comando pg_connect B encerrada ao fina! da e7ecuo 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 cone7o (1 IMP?52A+24: o comando pg_c!ose no 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 e7presso SH/ a ser e7ecutada) sem o ponto6e6v=rgu!a no fina!) e cone7ao B o identificador da cone7o a ser uti!iAada. A consu!ta ser> e7ecutada na base de dados se!ecionada ;uando for efetuada a cone7o com o banco. Para saber ;ua! a base de dados se!ecionada) basta uti!iAar a funo string pg_dbname) ;ue tem a seguinte assinatura: string pg_dbname'int cone7o(1 Z bom !embrar ;ue uma consu!ta no 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 e7presso SH/ for incorreta) e diferente de Aero se for correta. +o caso de uma e7presso S4/4C2) as !in#as retornadas so 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Aerificando o erro na e>ecuo de uma ,uer; Para ter acesso ] mensagem de erro no caso de fa!#a na e7ecuo 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 no 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 sero 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 so 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 diferena ;ue os =ndices do arra& so numBricos) iniciando pe!o % 'Aero(. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 57 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais *K% 7tili8ando !eaders ? comando #eader permite enviar cabea!#os #tm! para o c!iente. .eve ser uti!iAado por usu>rios ;ue con#eam a funo 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 so: **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 e7pirao 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 endereo: #ttp:**www.wI.org*Protoco!s*rfc$%NR*rfc$%NR Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA *M% 7tili8ando coo4ies + ,ue so Coo9ies so vari>veis gravadas no c!iente'browser( por um determinado site. Somente o site ;ue gravou o coo9ie pode !er a informao 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!iAao de coo9ies so sites ;ue informam a ;uantidade de veAes ;ue vocQ M> visitou) ou a!guma informao fornecida numa visita anterior. 47istem coo9ies persistentes e coo9ies de sesso. ?s persistentes so a;ue!es gravados em ar;uivo) e ;ue permanecem apGs o browser ser fec#ado) e possuem data e #ora de e7pirao. ?s coo9ies de sesso no so armaAenados em disco e permanecem ativos apenas en;uanto a sesso do browser no for encerrada. Por definio) 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 funo 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 e7pirao do coo9ie 'opciona!() no formato ,ni7. Se no for definida) o coo9ie ser> de sesso1 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 cone7o segura '#ttps(. ?bserva<es: ,m coo9ie no pode ser recuperado na mesma p>gina ;ue o gravou) a menos ;ue esta seMa recarregada pe!o browser. M@!tip!as c#amadas ] funo setcoo9ie sero e7ecutadas em ordem inversa1 Coo9ies sG podem ser gravados antes do envio de ;ua!;uer informao para o c!iente. Portanto todas as c#amadas ] funo setcoo9ie devem ser feitas antes do envio de ;ua!;uer #eader ou te7to. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 59 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 funo cop&) desde ;ue o usu>rio ten#a as permiss<es necess>rias para isso. A assinatura da funo 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 no seMa rea!iAada. Aerificando o taman!o de um ar,uivo A funo fi!esiAe pode ser bastante @ti! na criao de um script ;ue !iste o conte@do de um diretGrio) mas tambBm B uti!iAada em casos como a funo fread) ;ue ser> vista mais adiante. int fi!esiAe'string ar;uivo(1 4sta funo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 funo fi!e_e7ists: int fi!e_e7ists'string ar;uivo(1 4sta funo tem um comportamento boo!eano: retorna apenas true ou fa!se) no informando mais nada sobre o ar;uivo. 0impando o cac!e Por terem e7ecuo !enta) a!gumas fun<es ;ue verificam o estado de ar;uivos uti!iAam um cac#e) ou seMa) c#amadas sucessivas da mesma funo com re!ao ao mesmo ar;uivo no verificam se #ouve mudana 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 funo) deve ser uti!iAada a seguinte funo: void c!earstatcac#e'(1 A pa!avra DvoidE indica ;ue a funo no 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 funo fopen) como visto a seguir: int fopen'string ar;uivo) string modo) int ause_inc!ude_pat#U(1 A funo 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 permisso apenas para !eitura. rk Abre o ar;uivo com permisso para escrita e !eitura) posicionando o ponteiro no in=cio do mesmo. w Abre o ar;uivo com permisso apenas para escrita. Se o ar;uivo e7istir) todo o conte@do B apagado. Se no e7istir) o P3P tenta cri>6!o. ? ponteiro B posicionado no in=cio do ar;uivo wk Abre o ar;uivo com permisso para escrita e !eitura. Se o ar;uivo e7istir) todo o conte@do B apagado. Se no e7istir) o P3P tenta cri>6!o. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 61 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais ? ponteiro B posicionado no in=cio do ar;uivo a Abre o ar;uivo com permisso apenas para escrita. Se o ar;uivo no e7istir) o P3P tenta cri>6!o. ? ponteiro B posicionado no fina! do ar;uivo ak Abre o ar;uivo com permisso para escrita e !eitura. Se o ar;uivo no e7istir) o P3P tenta cri>6!o. ? ponteiro B posicionado no fina! do ar;uivo. Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA ? ponteiro citado na tabe!a dos modos de abrir um ar;uivo refere6se ] posio a partir de onde os dados sero !idos e*ou gravados. Para a!terar a posio desse ponteiro) pode6se uti!iAar a funo fsee9: int fsee9'int fp) int posio(1 ?nde fp B um identificador de ar;uivo) retornado da funo fopen. ? terceiro parCmetro da funo 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 sero procurados. A!Bm de abrir ar;uivos !oca!mente) uti!iAando o sistema de ar;uivos) a funo 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 so iguais() uma cone7o B aberta com o servidor e o ar;uivo contendo o te7to de retorno ser> aberto. A24+qr?: ;ua!;uer a!terao 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 so iguais() uma cone7o 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 no simu!taneamente. Para encerrar a manipulao de um ar,uivo deve$se utili8ar a funo fcloseU ,ue tem o se&uinte formato@ int fc!ose'int fp(1 ?nde fp B o identificador do ar;uivo) retornado pe!a funo fopen. 0endo de um ar,uivo string fread'int fp) int taman#o(1 4sta funo 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) no ocorre erro) tendo como retorno apenas o ar;uivo. +a maioria dos casos a funo 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 funo 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 no obter resu!tados indeseMados. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 63 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Escrevendo em um ar,uivo int fwrite'int fp) string conteudo) int ataman#oU(1 4sta funo 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 gravao 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) no podendo #aver te7to a!gum 'nem mesmo espao 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 e7ecuo do script. A!Bm disso) ;uatro vari>veis so 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 informao for fornecida pe!o browser1 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 funo 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 funo 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 cabea!#o) como por e7emp!o DfromE) Drep!&6toE) DbccE) etc. Para faci!itar a compreenso dos scripts) os argumentos 'como gera!mente so strings grandes( devem ser atribu=dos a vari>veis antes da c#amada da funo mai!. Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 65 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais "#% Bi'lio&rafia e /eferncias 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 endereos contBm uma vasta documentao sobre a !inguagem) a!Bm de endereos para !istas de discusso) 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 endereo www.egroups.com/group/php-pt/. 4m ing!Qs) a!Bm dos endereos citados acima) uma boa fonte B o site PHP0i(ard) ;ue pode ser encontrado em www.phpwizard.net. 2ambBm em ing!Qs) uma documentao mais comp!eta sobre coo9ies pode ser encontrada em www.netscape.com/newsref/std/cookie_spec.html. Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA APZD5ICE #* $ 2unLes para tratamento de strin&s 2unLes 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 representao 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 67 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Abre um ar;uivo #tm! e percorre o cabea!#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 e7ecuo da funo: 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 funo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA 2unLes 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 so 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 padro 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 ] funo sp!it) com a diferena ;ue no B poss=ve! estabe!ecer um !imite para o n@mero de e!ementos do arra&. ComparaLes 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 69 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais ?pciona!mente pode ser fornecida uma vari>ve!) passada por referQncia 1'er t2pico so)re un3es4) ;ue receber> o va!or percentua! de igua!dade entre as strings. 4sta funo B case sensiti'e) ou seMa) mai@scu!as e min@scu!as so 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 funo B case insensiti'e) ou seMa) mai@scu!as e min@scu!as so tratadas como iguais. strcmp int strcasecmp'string str0) string str$(1 -unciona de maneira seme!#ante ] funo strcasecmp) com a diferena ;ue esta B case sensiti'e) ou seMa) mai@scu!as e min@scu!as so tratadas como diferentes. strstr string strstr'string str0) string str$(1 string strc#r'string str0) string str$(1 As duas fun<es so idQnticas. Procura a primeira ocorrQncia de str$ em str0. Se no 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 ] funo strstr) com a diferena ;ue esta B case insensiti'e) ou seMa) mai@scu!as e min@scu!as so tratadas como iguais. strpos int strpos'string str0) string str$) int aoffsetU (1 5etorna a posio da primeira ocorrQncia de str$ em str0) ou Aero se no #ouver. ? parCmetro opciona! offset determina a partir de ;ua! caracter de str0 ser> efetuada a busca. Mesmo Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 posio da @!tima ocorrQncia de str$ em str0) ou Aero se no #ouver. 2unLes para edio de strin&s c!op string c#op'string str(1 5etira espaos 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 espaos 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 espaos 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 71 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA 2unLes 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 73 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais APZD5ICE #" $ 2unLes para tratamento de arra;s 2unLes Gen-ricas Arra; arra& arra&'...(1 Z a funo ;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 no apenas de inteiro. Se o =ndice no 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 no #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 no 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 no fosse e7p!icitado( M W\ DcincoE 'seria N) se no estivesse ocupado( 4m gera!) no 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 ateno ao manipu!ar os =ndices do arra&. ran&e arra& range'int minimo) int ma7imo(1 A funo range cria um arra& cuMos e!ementos so os inteiros pertencentes ao interva!o fornecido) inc!usive. Se o va!or do primeiro parCmetro for maior do ;ue o do segundo) a funo retorna fa!se 'va!or vaAio(. Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA s!uffle void s#uff!e'arra& Xarr(1 4sta funo Dembara!#aE o arra&) ou seMa) troca as posi<es dos e!ementos a!eatoriamente e no 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 no B do tipo arra&) retorna 0. Se a vari>ve! no estiver setada ou for um arra& vaAio) retorna %. 2unLes de Xnave&aoY 2oda vari>ve! do tipo arra& possui um ponteiro interno indicando o prG7imo e!emento a ser acessado no caso de no 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 no B uma boa funo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 75 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 so %) 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 funo 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 funo no retornar> o va!or fa!se. A funo eac# sG retorna fa!se depois ; o @!timo e!emento do arra& foi encontrado. 47emp!o: *Yfuno ;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 2unLes de ordenao So fun<es ;ue servem para arrumar os e!ementos de um arra& de acordo com determinados critBrios. 4stes critBrios so: manuteno ou no da associao entre =ndices e e!ementos1 ordenao por e!ementos ou por =ndices1 funo de comparao entre dois e!ementos. sort void sort'arra& Xarr(1 A funo mais simp!es de ordenao 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA rsort void rsort'arra& Xarr(1 -unciona de maneir ainversa ] funo 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 ] funo 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 ] funo 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 -uno de ordenao 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 funo ;ue uti!iAa outra funo como parCmetro. ?rdena os e!ementos de um arra& sem manter os re!acionamentos com os =ndices) e uti!iAa para efeito de comparao uma funo 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 funo tambBm uti!iAa outra funo como parCmetro. ?rdena os e!ementos de um arra& e mantBm os re!acionamentos com os =ndices) uti!iAando para efeito de comparao uma funo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 77 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais u4sort void u9sort'arra& Xarr) function compara(1 4sta funo ordena o arra& atravBs dos =ndices) mantendo os re!acionamentos com os e!ementos.) e uti!iAa para efeito de comparao uma funo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA APZD5ICE #9 [ 6ipos suportados pelo m;SC0 Dum-ricos +ome do tipo Espao 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 Espao utili8ado .A24 I b&tes .A242IM4 R b&tes 2IM4S2AMP K b&tes 2IM4 I b&tes e4A5 0 b&te Curso de Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 79 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Strin&s +ome do tipo Espao 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA Dotas do autor 4ste documento foi criado inicia!mente como parte do proMeto de conc!uso 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 no 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) !anado #> menos de um mQs. PorBm todo o conte@do ;ue segue B compat=ve! com P3PK) e por isso no #> prob!ema em !anar esta nova verso 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 peo 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 no ter visto) M> fui informado ;ue #> cGpias piratas deste documento. Mas ;uero !embrar ;ue no B preciso piratear a!go comp!etamente G/A67I6+. $Y Se #ouver a!guma informao incorreta) peo ;ue me informem por e6mai!. Se tiverem d@vidas sobre temas tratados a;ui) ou atB sobre os ainda no presentes neste documento) entrem em contato comigo por e6mai!. Para obter a verso 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 81 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Controle de versLes Data Autor Observaes 00*%L*%% Maur=cio Vivas Verso inicia! disponibi!iAada no CIPSA 0J*%N*%% Maur=cio Vivas Segunda Verso da aposti!a Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 83 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 85 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo 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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 87 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo 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 Reproduo permitida desde que mantido o contedo e fonte originais Comit de Incentivo a Produo do Software Gratuito e Alternativo CIPSGA ComitQ de Incentivo a Produo 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 uimares .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 Aplicaoes WEB em PHP $ www%cips&a%or&%'r $ cursos(cips&a%or&%'r $ P)&ina 89 Com certeza a melhor apostila PHP Reproduo permitida desde que mantido o contedo e fonte originais