Você está na página 1de 23

Introduo PHP uma sigla recursiva que significa PHP HyperText Preprocessor.

. O PHP uma linguagem de cdigo-fonte aberto, muito utilizada na Internet e especialmente criada para o desenvolvimento de aplicativos Web. Note como isso diferente de scripts CGI escritos em outras linguagens como Perl ou C - ao invs de escrever um programa com um monte de comandos para imprimir HTML, voc escreve um arquivo HTML com algum cdigo inserido para fazer alguma coisa (nesse caso, imprimir um pouco de texto). O cdigo PHP delimitado por tags iniciais e finais que lhe permitem pular pra dentro e pra fora do modo PHP. A melhor coisa em usar PHP est no fato de ele ser extremamente simples para um iniciante, mas oferece muitos recursos para o programador profissional. Para testar scripts PHP necessrio um servidor com suporte a esta tecnologia. Normalmente, o mais utilizado o Apache. O banco de dados mais utilizado com os scripts PHP o MySQL. Um exemplo de pacote pronto para execuo de um ambiente Apache + PHP + MySQL o EasyPHP (http://www.easyphp.org). Qualquer editor de textos pode ser usado para escrever os scripts PHP (ex. bloco de notas ou a ferramenta free MPS PHP Designer em http://www.mpsoftware.dk). As pginas PHP devem ser salvas no diretrio raiz do servidor. Para testes locais com o EasyPHP, essa pasta c:\Arquivos de programas\EasyPHP\www. Para acessar a pgina, deve-se abrir o browser Internet Explorer e digitar-se o nome do domnio (http://127.0.0.1) e o nome da pgina com extenso .php. Quando o EasyPHP est sendo executado, aparece um cone com uma letra e ao lado do relgio do Windows. Exemplo de Script Para criar o primeiro exemplo, digite o seguinte cdigo-fonte no seu editor e salve com o nome de teste.php dentro do diretrio raiz do servidor. <html> <head> <title>Sou EAGS-SIN</title> </head> <body> <?php echo "<p>Rumo a Guaratinguet!</p>"; ?> </body> </html> No browser, digite o endereo http://127.0.0.1/teste.php e veja o resultado. Veja tambm o cdigo fonte da pgina (Exibir > Cdigo fonte). interessante notar que os comandos PHP no aparecem porque o servidor interpreta todos os scripts antes de enviar a pgina para o browser. O que PHP pode fazer ? Qualquer coisa. O PHP focado para ser uma linguagem de script do lado do servidor, portanto, voc pode fazer qualquer coisa que outro programa CGI pode fazer, como: coletar dados de formulrios, gerar pginas com contedo dinmico ou enviar e receber cookies. Mas o PHP pode fazer muito mais. Esses so os maiores campos onde os scripts PHP podem se utilizados: Script no lado do servidor (server-side). Este o mais tradicional e principal campo de atuao do PHP. Voc precisa de trs coisas para seu trabalho. O interpretador do PHP (como CGI ou mdulo), um servidor web e um browser. Basta rodar o servidor web conectado a um PHP instalado. Voc pode acessar os resultados de seu programa PHP com um browser, visualizando a pgina PHP atravs do servidor web. Script de linha de comando. Voc pode fazer um script PHP funcionar sem um servidor web ou browser. A nica coisa necessria o interpretador. Esse tipo de so ideal para script executados usando o cron ou o Agendador de Tarefas (no Windows). Esses scripts podem ser usados tambm para rotinas de processamento de texto. Escrevendo aplicaes GUI no lado do cliente (client-side). O PHP no (provavelmente) a melhor linguagem para produo de aplicaes com interfaces em janelas, mas o PHP faz isso muito bem, e se voc deseja usar alguns recursos avanados do PHP em aplicaes no lado do cliente poder utilizar o PHP-GTK para escrever esses programas. E programas escritos desta forma ainda sero independentes de plataforma. O PHP-GTK uma extenso do PHP, no disponvel na distribuio oficial. Se voc est interessado no PHP-GTK, visite o site http://gtk.php.net.

O PHP pode ser utilizado na maioria dos sistemas operacionais, incluindo Linux, vrias variantes Unix (incluindo HP-UX, Solaris e OpenBSD), Microsoft Windows, Mac OS X, RISC OS, e provavelmente outros. O PHP tambm suportado pela maioria dos servidores web atuais, incluindo Apache, Microsoft Internet Information Server, Personal Web Server, Netscape and iPlanet Servers, Oreilly Website Pro Server, Caudium, Xitami, OmniHTTPd, e muitos outros. O PHP pode ser configurado como mdulo para a maioria dos servidores, e para os outros como um CGI comum. Com o PHP, portanto, voc tem a liberdade para escolher o sistema operacional e o servidor web. Do mesmo modo, voc pode escolher entre utilizar programao estrutural ou programao orientada a objeto, ou ainda uma mistura deles. Mesmo no desenvolvendo nenhum recurso padro de OOP (Object Oriented Programming, Programao Orientada a Objetos) na

verso atual do PHP, muitas bibliotecas de cdigo e grandes aplicaes (incluindo a biblioteca PEAR) foram escritos somente utilizando OOP. Com PHP voc no est limitado a gerar somente HTML. As habilidades do PHP incluem gerao de imagens, arquivos PDF e animaes Flash (utilizando libswf ou Ming) criados dinamicamente. Voc pode facilmente criar qualquer padro texto, como XHTML e outros arquivos XML. O PHP pode gerar esses padres e os salvar no sistema de arquivos, em vez de imprimi-los, formando um cache dinmico de suas informaes no lado do servidor. Talvez a mais forte e mais significativa caracterstica do PHP seu suporte a uma ampla variedade de banco de dados. Escrever uma pgina que consulte um banco de dados incrivelmente simples. Os seguintes bancos de dados so atualmente suportados: Adabas D InterBase PostgreSQL Hyperwave MySQL Unix dbm Ingres Ovrimos FilePro (read-only) Direct MS-SQL Velocis Oracle (OCI7 and OCI8) Empress mSQL Sybase Informix dBase FrontBase Solid IBM DB2 ODBC

Adicionalmente, o PHP suporta ODBC (Open Database Connection, ou Padro Aberto de Conexo com Bancos de Dados), permitindo que voc utilize qualquer outro banco de dados que suporte esse padro mundial. O PHP tambm tem suporte para comunicao com outros servios utilizando protocolos como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (em Windows) e incontveis outros. Voc pode abrir sockets de rede e interagir diretamente com qualquer protocolo. O PHP tambm suporta o intercmbio de dados complexos WDDX, utilizado em virtualmente todas as linguagens de programao para web. Falando de comunicao, o PHP implementa a instanciao de objetos Java e os utiliza transparentemente como objetos PHP. Voc ainda pode usar sua extenso CORBA para acessar objetos remotos. O PHP extremamente til em recursos de processamento de texto, do POSIX Estendido ou expresses regulares Perl at como interpretador para documentos XML. Para acessar e processar documentos XML, so suportados os padres SAX e DOM. Voc ainda pode usar nossa extenso XSLT para transformar documentos XML. Utilizando o PHP no campo do e-commerce, voc poder usar as funes especficas para Cybescash, CyberMUT, Verysign Payflow Pro e CCVS, prticos sistemas de pagamento online. Por ltimo mas longe de terminar, temos tambm outras extenses interessantes: funes para o search engine mnoGoSearch, funes para Gateway IRC, vrios utilitrios de compresso (gzip, bz2), calendrio e converses de datas, traduo, etc. Configurao (php.ini) As configuraes do PHP ficam armazenadas em um arquivo denominado php.ini e que carregado cada vez que o servidor iniciado. No Windows, ele fica na pasta c:\Windows. Exemplo: [PHP] ;;;;;;;;;;; ; WARNING ; ;;;;;;;;;;; ; This is the default settings file for new PHP installations. ; By default, PHP installs itself with a configuration suitable for ; development purposes, and *NOT* for production purposes. ; For several security-oriented considerations that should be taken ; before going online with your site, please consult php.inirecommended ; and http://php.net/manual/en/security.php. ;;;;;;;;;;;;;;;;;;; ; About this file ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of PHP's behavior. In order for PHP to ; read it, it must be named 'php.ini'. PHP looks for it in the current ; working directory, in the path designated by the environment variable ; PHPRC, and in the path that was defined in compile time (in that order). ; Under Windows, the compile-time path is the Windows directory. The ; path in which the php.ini file is looked for can be overridden using ; the -c argument in command line mode. ; ; The syntax of the file is extremely simple. Whitespace and Lines ; beginning with a semicolon are silently ignored (as you probably guessed). ; Section headers (e.g. [Foo]) are also silently ignored, even though ; they might mean something in the future. Atravs de modificaes neste arquivo possvel alterar vrias opes no comportamento do PHP. Todas as linhas iniciadas por ponto-e-vrgula so comentrios. Sintaxe Bsica Tags especiais indicam ao PHP onde esto os blocos de cdigo. A tag de abertura formada por um sinal de menor que (<), um sinal de interrogao (?) e a sigla php. A tag de fechamento formada por um ponto interrogao (?) e sinal de maior que (>). Ex:

<?php ... ?> Exerccio: digite o cdigo da figura 1 e salve no diretrio raiz do servidor Apache. Veja o resultado da pgina atravs de seu carregamento no browser. O sinal de ponto-e-vrgula (;) indica o final de um comando. A prxima figura mostra outro exemplo. <html> <head> <title>Teste PHP</title> </head> <body> <?php $a = 10; $b = 15; $c = $a + $b; echo "$a mais $b igual a $c"; ?> </body> </html> Os comentrios de mais de uma linha no PHP so obtidos atravs de /* e */. Os comentrios de apenas uma linha so obtidos atravs de //. <html> <head> <title>Teste PHP</title> </head> <body> <?php /* O cdigo abaixo soma duas variveis e exibe o valor encontrado */ $a = 10; $b = 15; $c = $a + $b; echo "$a mais $b igual a $c"; ?> </body> </html> Os comentrios no aparecem no browser. <html> <head> <title>Teste PHP</title> </head> <body> <?php $a = 10; //A varivel $a recebe o valor 10 $b = 15; //A varivel $b recebe o valor 15 //A varivel $c recebe o valor da soma $c = $a + $b; //O resultado obtido exibido echo "$a mais $b igual a $c"; ?> </body> </html> Variveis Variveis armazenam valores. Pode-se referir variveis para obter seu valor ou para alterar seu contedo. No PHP elas so representadas por um cifro ($) mais o nome da varivel. Os nomes de variveis vlidos so iniciados por letras ou por um subscrito ( _ ). Existe diferenciao entre nomes de variveis maisculas e minsculas. Ex: $a, $_A, $_a <html> <head> <title>Teste PHP</title> </head>

<body> <?php $a = 10; $A = 20; echo "O valor de 'a' $a e o de 'A' $A"; ?> </body> </html> Quando a varivel declarada dentro de uma funo, ela s estar disponvel para o cdigo desta funo. O cdigo a seguir gera um erro devido a essa caracterstica. Declarao de varivel dentro de funo <html> <head> <title>Teste PHP</title> </head> <body> <?php function soma($a) { $b = $a + 5; } soma(10); echo "o valor de 'b' $b"; ?> </body> </html> Para evitar este tipo de problema, deve-se definir a varivel como global. O cdigo a seguir resolve o problema do cdigo anterior. Compare os resultados dos dois scripts. Declarao de varivel global <html> <head> <title>Teste PHP</title> </head> <body> <?php function soma($a) { global $b; $b = $a + 5; } soma(10); echo "o valor de 'b' $b"; ?> </body> </html> Tipos de dados O PHP suporta vrios tipos de dados: Inteiro Nmeros inteiros (isto , nmeros sem ponto decimal) Nmeros de dupla preciso Nmeros reais (isto , nmeros que contm um ponto decimal) String Texto entre aspas simples ( ) ou duplas ( ) Booleanos armazenam valores verdadeiros ou falsos, usados em testes de condies Array Grupo de elementos do mesmo tipo Objeto Grupo de atributos e mtodos Recurso Uma origem de dados externa Nulo Nenhum valor Cdigo com dados booleanos <html> <head> <title>Teste PHP</title> </head> <body> <?php $a = True; if ($a)

{ echo "Verdadeiro"; } else { echo "Falso"; } ?> </body> </html> Teste o cdigo anterior alterando o valor da varivel para False. Pode-se armazenar valores inteiros, positivos ou negativos. Pode-se usar tambm valores hexadecimais. Cdigo com variveis hexadecimal e valor negativo <html> <head> <title>Teste PHP</title> </head> <body> <?php $a = 0x1A; //Coresponde ao decimal 26 $b = -16; $c = $a + $b; echo "a + b = $c"; ?> </body> </html> Os valores de ponto flutuante so representados atravs de ponto ( . ). Cdigo com varivel de ponto flutuante <html> <head> <title>Teste PHP</title> </head> <body> <?php $preco = 11.90; $soma = $preco * 4; echo "Quatro revistas W custam R$ $soma<br>"; ?> </body> </html> As strings so armazenadas dentro de aspas duplas ( ) ou simples ( ). Cdigo com strings entre aspas simples e duplas <html> <head> <title>Teste PHP</title> </head> <body> <?php $texto1 = 'Esse o primeiro texto.<br>'; $texto2 = "Esse o segundo texto."; echo $texto1; echo $texto2; ?> </body> </html> As variveis do tipo matriz ou array permitem o armazenamento de diversos elementos referenciados por uma mesma referncia. Cdigo com matriz <html> <head> <title>Teste PHP</title> </head> <body>

<?php $frutas = array( 1 => "Laranja", 2 => "Ma", 3 => "Uva"); echo "<li> $frutas[1]<br>"; echo "<li> $frutas[2]<br>"; echo "<li> $frutas[3]<br>"; ?> </body> </html> Constantes Constantes so identificadores para valores simples. O seu contedo no muda durante a execuo do cdigo. Elas so criadas com a funo define e, por conveno, so escritas com letras maisculas e no usam o cifro no incio. Cdigo com constante <html> <head> <title>Teste PHP</title> </head> <body> <?php define("CONSTANTE", "Al mundo."); echo CONSTANTE; ?> </body> </html> O PHP implementa algumas constantes, a maioria so matemticas. O cdigo seguinte demonstra o uso da constante M_PI. Cdigo com a constante M_PI <html> <head> <title>Teste PHP</title> </head> <body> <?php function calculaAreaCirculo($raio) { return M_PI * pow($raio, 2); } $meuRaio = 5; $area = calculaAreaCirculo($meuRaio); echo "<b>Raio</b> = $meuRaio<br>"; echo "<b>rea</b> = $area"; ?> </body> </html> Expresses Tudo que tem um valor pode ser considerado uma expresso. O cdigo a seguir demonstra na prtica. Cdigo com uso de expresso <html> <head> <title>Teste PHP</title> </head> <body> <?php $b = ($a = 5); echo "O valor de 'b' $b"; ?> </body> </html>

Variao do cdigo anterior <html> <head>

<title>Teste PHP</title> </head> <body> <?php $b = $a = 5; echo "O valor de 'b' $b"; ?> </body> </html> Expresses de comparao retornam valores booleanos, sendo vazio representando verdadeiro e um representando falso. As expresses de comparao so usadas em declaraes condicionais para determinar se um bloco de cdigo ser executado ou no. Cdigo com expresso de comparao <html> <head> <title>Teste PHP</title> </head> <body> <?php $valor = (5 < 10); echo "O valor da expresso '5 > 10' $valor"; ?> </body> </html> Operadores So usados para efetuarem operaes sobre as variveis e constantes. Os operadores do PHP so: + soma - subtrao * multiplicao / diviso ^ exponenciao % mdulo, resto da diviso ++ acrescenta um a uma varivel -- subtrai um de uma varivel += soma um valor a uma varivel e lhe atribui o resultado Cdigo com diversas operaes matemticas <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 2; echo($x + 2); echo "<br>"; $x = 2; echo(5 - $x); echo "<br>"; $x = 4; echo($x * 5); echo "<br>"; $x = 15; echo($x / 5); echo "<br>"; $x = 10; echo($x % 8); echo "<br>"; $x = 5; $x++; echo($x); echo "<br>"; $x = 5; $x--; echo($x); echo "<br>"; $x = 8; echo($x);

echo "<br>"; $x = 8; $x = $x + 10; echo($x); echo "<br>"; $x = 8; $x += 10; echo($x); ?> </body> </html> H tambm os operadores de comparao. Uma comparao sempre gera um dos dois valores possveis: vazio, que corresponde a falso, e 1, que corresponde a verdadeiro. = = igual a ! = no igual a > maior que < menor que >= maior ou igual a <= menor ou igual a Cdigo com operadores de comparao <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 5; $resultado = ($x == 8); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; } echo "<br>"; $x = 5; $resultado = ($x != 8); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; } echo "<br>"; $x = 5; $resultado = ($x > 8); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; } echo "<br>"; $x = 5; $resultado = ($x > 8); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; }

echo "<br>"; $x = 5; $resultado = ($x >= 8); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; } echo "<br>"; $x = 5; $resultado = ($x <= 8); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; } ?> </body> </html> Operadores lgicos and ou && - operador lgico e, apenas retornando verdadeiro quando as duas condies envolvidas no teste forem verdadeiras or ou | | - operador lgico ou, retornando verdadeiro quando uma ou as duas condies envolvidas no teste forem verdadeiras ! - operador lgico no, invertendo o resultado de um teste xor operador lgico ou exclusivo que determina se uma de duas condies verdadeira mas no ambas. Se ambas forem verdadeiras, o teste final ser falso Cdigo com operadores lgicos <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 6; $y = 3; $resultado = ($x < 10 && $y > 1); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; } echo "<br>"; $x = 6; $y = 3; $resultado = ($x == 5 || $y == 5); if($resultado == 1) { echo "verdadeiro"; } else { echo "falso"; } echo "<br>"; $x = 6; $y = 3; $resultado = (!($x == $y)); if($resultado == 1) { echo "verdadeiro"; }

else { echo "falso"; } ?> </body> </html> Estruturas de Controle No PHP, as estruturas de controle so formadas por declaraes condicionais e de looping: if executa uma ao se uma condio for atendida. O bloco de comandos a ser executado deve ser escrito entre chaves; else pode-se colocar um conjunto de comandos alternativos caso o teste do if seja negativo. A declarao else deve vir logo aps o bloco de cdigo relacionado ao if. O comando if tambm pode ser usado aps a declarao else. Cdigo com declarao condicional if verdadeiro <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 20; if ($x > 10) { echo("O valor da varivel maior que 10."); } ?> </body> </html> Cdigo com declarao condicional if falso <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 5; if ($x > 10) { echo("O valor da varivel maior que 10."); } ?> </body> </html> Cdigo com declarao condicional if e else <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 5; if ($x > 10) { echo("O valor da varivel maior que 10."); } else { echo("O valor da varivel menor que 10."); } ?> </body> </html> Cdigo com declarao condicional if e else if <html>

10

<head> <title>Teste PHP</title> </head> <body> <?php $cor = "branco"; if ($cor == "vermelho") { echo("A varivel contm o valor 'vermelho'."); } else if ($cor == "azul") { echo("A varivel contm o valor 'azul'."); } else if ($cor == "amarelo") { echo("A varivel contm o valor 'amarelo'."); } else { echo("O valor da varivel no foi identificado."); } ?> </body> </html> switch / case forma de testar uma dentre vrias possibilidades. A declarao default executa caso nenhuma das opes for verdadeira. A declarao break faz com que o restante do cdigo no seja executado caso o teste seja verdadeiro. Cdigo com declarao condicional switch e case <html> <head> <title>Teste PHP</title> </head> <body> <?php $d = getdate(); switch ($d['wday']) { case 5: echo("Finalmente Sexta"); break; case 6: echo("Super Sbado"); break; case 0: echo("Domingo Sonolento"); break; default: echo("Estou esperando pelo fim da semana"); } ?> </body> </html> for estrutura de looping que executa um bloco de cdigo quantas vezes for indicado em uma varivel. Deve-se definir a varivel que ser testada no looping, uma condio de teste e o incremento (ou decremento) da varivel de controle. Cdigo com looping definido pelo comando if <html> <head> <title>Teste PHP</title> </head> <body> <?php for ($i = 1; $i < 10; $i++) { echo("Linha $i <br>"); } ?> </body>

11

</html> while estrutura de looping que no necessita de um nmero determinado de iteraes. Ele executado enquanto uma condio for verdadeira. Cdigo com declarao condicional while <html> <head> <title>Teste PHP</title> </head> <body> <?php $i = 1; while ($i < 10000) { echo($i); $i *= 2; echo(" vezes 2 igual a $i <br>"); } ?> </body> </html> do-while outra forma de looping que executa um bloco de cdigo, testa uma condio e repete novamente o bloco de cdigo (ou no). Cdigo com declarao condicional do-while <html> <head> <title>Teste PHP</title> </head> <body> <?php $i = 1; do { echo ("Linha $i <br>"); $i++; } while ($i < 10) ?> </body> </html> Funes Uma funo um bloco de cdigo reutilizvel que executado devido a um evento ou pela chamada de outra funo. Deve-se usar a declarao function para criar uma funo. Os parmetros usados pela funo so declarados entre parnteses. Os comandos a serem executados pela funo devem estar entre chaves. A declarao return retorna um valor quando a funo chamada. Esta declarao no necessria se a funo no retorna nenhum valor. Para se chamar uma funo, deve-se escrever seu nome e indicar os parmetros entre parnteses. Exemplo de uma funo <html> <head> <title>Teste PHP</title> </head> <body> <?php function soma($valor1, $valor2) { $resultado = $valor1 + $valor2; return ($resultado); } $x = soma(7, 8) echo($x); ?> </body> </html> Segundo exemplo de declarao de funo <html>

12

<head> <title>Teste PHP</title> </head> <body> <?php function escreveTexto() { echo("J sei criar funes!"); } escreveTexto(); ?> </body> </html> Classes e Objetos Uma classe uma coleo de atributos e mtodos. O cdigo a seguir define uma classe chamada CarrinhoDeCompras, que uma matriz associativa com os artigos do carrinho e duas funes: uma para adicionar e outra para remover os itens. Classes so tipos, isto , rascunhos para a criao de objetos. Deve-se utilizar o operador new para criar uma varivel do tipo CarrinhoDeCompras. Cdigo de definio de uma classe <html> <head> <title>Teste PHP</title> </head> <body> <?php class CarrinhoDeCompras { var $items; // Items no carrinho de compras // Adiciona $num artigos do $artnr ao carrinho function adiciona_item ($artnr, $num) { $this->items[$artnr] = $num; } // Retira $num artigos do $artnr do carrinho function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?> </body> </html> Definio de classe e instanciao de um objeto do tipo CarrinhoDeCompras <html> <head> <title>Teste PHP</title> </head> <body> <?php class CarrinhoDeCompras { var $itens; // Itens no carrinho de compras // Adiciona $num artigos do $artnr ao carrinho function adiciona_item ($artnr, $num) { $this->itens[$artnr] = $num; } // Retira $num artigos do $artnr do carrinho function remove_item ($artnr, $num) { if ($this->itens[$artnr] > $num) { $this->itens[$artnr] -= $num; return true;

13

} else { return false; } } } $carrinho = new CarrinhoDeCompras; $carrinho->adiciona_item("Banana", 12); ?> </body> </html> Referncias Referncias, em PHP, significa acessar o mesmo contedo de varivel atravs de vrios nomes. Isto no parecido como os ponteiros em C: aqui temos apelidos numa tabela simblica. Note que no PHP nomes de variveis e contedo de varivel so tratados diferentemente, ento um mesmo contedo pode ter nomes diferentes. A analogia mais prxima a dos arquivos e seus nomes em sistemas UNIX: nomes de variveis so o caminho completo dos arquivos, enquanto o contedo da varivel so os dados desse arquivo. Assim, referncias pode ser tomadas como os links fsicos dentro do sistema de arquivos UNIX. No PHP, pode-se acessar valores de variveis atravs de diferentes nomes. Pode-se usar o sinal de igual seguido do sinal de e comercial (&). Referncias PHP permitem fazer duas variveis se referirem ao mesmo contedo. Ou seja: <?php $a =& $b ?> aqui $a e $b apontam para a mesma varivel. Nota: $a e $b so completamente iguais aqui, mas no porque $a est apontando para $b ou vice versa, mas sim que $a e $b apontam para o mesmo lugar. Cdigo de exemplo de atribuio de valor a duas variveis (a e b) <html> <head> <title>Teste PHP</title> </head> <body> <?php $a =& $b; $b = 100; echo $a; ?> </body> </html> O comando unset remove uma referncia previamente declarada, mas ela mantm o ltimo valor recebido. Cdigo de remoo de uma referncia <html> <head> <title>Teste PHP</title> </head> <body> <?php $a =& $b; $b = 100; unset($b); $b = 200; echo $a; ?> </body> </html> Matrizes Matrizes so variveis que armazenam mais de um valor simultaneamente. Uma matriz no PHP atualmente um mapa ordenado. Um mapa um tipo que relaciona valores para chaves. Este tipo otimizado de vrias maneiras, ento voc pode us-lo como um array real, ou uma lista (vetor), hashtable (que uma implementao de mapa), dicionrio, coleo, pilha, fila, etc. As referncias aos elementos da matriz podem ser declaradas como valores numricos ou strings. Cdigo com declarao de matriz <html>

14

<head> <title>Teste PHP</title> </head> <body> <?php $funcionarios = array(0 => "Jos", 1 => "Joo", 2 => "Maria", 3 => "Pedro", 4 => "Carla"); echo "<b>Funcionrios</b>"; echo "<ul>"; echo "<li>" . $funcionarios[0]; echo "<li>" . $funcionarios[1]; echo "<li>" . $funcionarios[3]; echo "</ul><p>"; echo "<b>Funcionrias</b>"; echo "<ul>"; echo "<li>" . $funcionarios[2]; echo "<li>" . $funcionarios[4]; echo "</ul>"; ?> </body> </html> Cdigo com declarao de matriz e referncia atravs de string <html> <head> <title>Teste PHP</title> </head> <body> <?php $siglas = array("SP" => "So Paulo", "RJ" => "Rio de Janeiro", "MG" => "Minas Gerais"); echo $siglas["SP"]; ?> </body> </html> Incluso de Arquivos O comando include permite a incluso de outros arquivos php dentro do script que est sendo executado. Pode-se criar uma funo que imprime a data atual e pode-se reus-lo sem precisar reescrever o cdigo cada vez que for necessrio. No exemplo a seguir, pode-se chamar o primeiro script de cabecalho.php e o prximo script o inclui atravs do comando include. Script que salvo com o nome de cabecalho.php <html> <head> <title>Teste PHP</title> </head> <body> <?php $meses = array(1 => "Janeiro", 2 => "Fevereiro", 3 => "Maro", 4 => "Abril", 5 => "Maio", 6 => "Junho", 7 => "Julho", 8 => "Agosto", 9 => "Setembro", 10 => "Outubro", 11 => "Novembro", 12 => "Dezembro"); $hoje = getdate(); $dia = $hoje["mday"]; $mes = $hoje["mon"]; $nomeMes = $meses[$mes]; $ano = $hoje["year"]; echo "Ol. Hoje dia $dia de $nomeMes de $ano." ?>

15

</body> </html> Cdigo com incluso de arquivo externo chamado cabecalho.php <html> <head> <title>Pgina PHP</title> </head> <body> <?php include("cabecalho.php"); ?> </body> </html> Cookies Cookies so formas de armazenar informaes a respeito de uma sesso dentro do disco rgido do usurio cliente. O comando setcookie armazena um cookie com as informaes que se desejam recuperar em seguida. Quando no for declarado um tempo de vida, o cookie se auto-destri quando a sesso encerrada (quando o browser for fechado). Cdigo que cria um cookie com o nome do usurio <?php if (isset($HTTP_POST_VARS['usuario'])) { $user = $HTTP_POST_VARS['usuario']; setcookie("usuario", $user); $mensagem = "Usurio $user conectado.<p>"; } else { $mensagem = "Digite o seu nome de usurio<p>"; } ?> <html> <head> <title>Teste PHP</title> </head> <body> <? echo $mensagem; ?> <form method="post" action="teste.php"> Nome de Usurio: <input type="text" name="usuario"> <br> <input type="submit" value="Enviar"> </form> </body> </html> Cdigo que recupera os dados do cookie criado anteriormente <html> <head> <title>Pgina PHP</title> </head> <body> <?php $user = $_COOKIE["usuario"]; echo "O usurio $user est conectado."; ?> </body> </html> O cdigo a seguir demonstra o uso de um cookie com tempo de vida definido em 3600 segundos, isto , uma hora. Aps uma hora decorrida de sua criao, ele removido. Cdigo que cria um cookie com o nome do usurio que dura uma hora <?php if (isset($_POST['usuario'])) { $user = $_POST['usuario']; setcookie("usuario", $user, time() + 3600); // Expira em uma hora $mensagem = "Usurio $user conectado.<p>"; }

16

else { $mensagem = "Digite o seu nome de usurio<p>"; } ?> <html> <head> <title>Teste PHP</title> </head> <body> <? echo $mensagem; ?> <form method="post" action="teste.php"> Nome de Usurio: <input type="text" name="usuario"> <br> <input type="submit" value="Enviar"> </form> </body> </html> Parmetros O uso de parmetros facilita a programao porque permite a passagem de dados entre o browser e o script ou entre scripts. A passagem de parmetros entre o browser e o script feita dentro da URL, por exemplo e manipulada pela funo $_GET. Nesse exemplo a seguir, cada um dos links envia um valor diferente para a pgina que aberta (teste.php). Para enviar um parmetro, a sintaxe inclui um sinal de interrogao, o nome da varivel, um sinal de igual e o valor da varivel. Cdigo com passagem de parmetro <html> <head> <title>Pgina PHP</title> </head> <body> <?php if (isset($_GET["valor"])) { $valor = $_GET["valor"]; echo "Voc clicou no link $valor <p>"; } else { echo "Clique em um dos links abaixo:<p>"; } ?> <a href="teste.php?valor=1">link 1</a><br> <a href="teste.php?valor=2">link 2</a><br> <a href="teste.php?valor=3">link 3</a><br> <a href="teste.php?valor=4">link 4</a><br> <a href="teste.php?valor=5">link 5</a><br> </body> </html> Caso exista necessidade de se passar mais de um parmetro, deve-se separ-los atravs de e comercial (&). Cdigo com passagem de mais de um parmetro <html> <head> <title>Pgina PHP</title> </head> <body> <?php if (isset($_GET["nome"]) && isset($_GET["sobrenome"])) { $nome = $_GET["nome"]; $sobrenome = $_GET["sobrenome"]; echo "O nome selecionado foi $nome $sobrenome<p>"; } else { echo "Selecione um nome<p>"; }

17

?> <a href="teste.php?nome=Pedro&sobrenome=Silva">Pedro Silva</a><br> <a href="teste.php?nome=Maria&sobrenome=Santos">Maria Santos</a><br> </body> </html> Formulrios Os valores enviados atravs de um formulrio podem ser recuperados pela varivel predefinida $_POST. Atravs dela possvel obter os dados que foram enviados atravs do mtodo POST do HTML, bastando indicar o nome do campo do formulrio. No comando action do formulrio, deve-se indicar a pgina PHP que ir receber os valores. O mesmo documento pode conter o cdigo e o formulrio. Cdigo com formulrio enviando dados atravs do mtodo POST <html> <head> <title>Pgina PHP</title> </head> <body> <?php if (isset($_POST["pnome"]) && isset($_POST["snome"])) { $pnome = $_POST["pnome"]; $snome = $_POST["snome"]; echo "Ol $pnome $snome.<p>"; } else { echo "Digite o seu nome.<p>"; } ?> <form method="post" action="teste.php"> Primeiro Nome: <input type="text" name="pnome"> <br> Sobrenome: <input type="text" name="snome"> <br><br> <input type="submit" value="Enviar"> </form> </body> </html> Se for usado o mtodo GET, os dados podem ser visualizados na URL do browser. Para recuperar estes dados, deve-se usar a varivel pr-definida $_GET. Cdigo com formulrio enviando dados atravs do mtodo GET <html> <head> <title>Pgina PHP</title> </head> <body> <?php if (isset($_GET["pnome"]) && isset($_GET["snome"])) { $pnome = $_GET["pnome"]; $snome = $_GET["snome"]; echo "Ol $pnome $snome.<p>"; } else { echo "Digite o seu nome.<p>"; } ?> <form method="get" action="teste.php"> Primeiro Nome: <input type="text" name="pnome"> <br> Sobrenome: <input type="text" name="snome"> <br><br> <input type="submit" value="Enviar"> </form> </body> </html>

18

Uploads O PHP permite que sejam enviados arquivos para o servidor. Deve-se modificar o arquivo de configurao (php.ini): file_uploads = On upload_tmp_dir ="C:\Arquivos de programas\EasyPHP\tmp\" upload_max_filesize = 2M Para o prximo exemplo, o diretrio de upload deve ser trocado para C:\temp. necessrio reiniciar o servidor a cada modificao em algum arquivo de configurao. Todas as informaes sobre o arquivo enviado ficam armazenadas na varivel $_FILES. O comando que trata o envio do arquivo move_uploaded_file. No exemplo a seguir, o usurio envia um arquivo de no mximo 30 Kb. Cdigo com upload de arquivo e armazenamento na pasta C:\temp <html> <head> <title>Pgina PHP</title> </head> <body> <?php if (isset($_FILES['arquivo']['name'])){ $uploaddir = 'c:\\temp\\'; $arquivo = $uploaddir. $_FILES['arquivo']['name']; if (move_uploaded_file($_FILES['arquivo']['tmp_name'], $arquivo)) { print "O arquivo foi gravado com sucesso."; } else { print "Erro. O arquivo no foi enviado."; } } ?> <form enctype="multipart/form-data" action="teste.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> Enviar este arquivo: <input name="arquivo" type="file"> <input type="submit" value="Envia Arquivo"> </form> </body> </html> Envio de e-mails O PHP permite que se enviem e-mails de forma automatizada. Para isso, deve-se ajustar o arquivo de configurao (php.ini) para se indicar o servidor SMTP: [mail function] SMTP = localhost ;for win32 only sendmail_from = me@localhost.com ;for win32 only ;sendmail_path = ;for unix only, may supply arguments as well (default is 'sendmail -t -i') A opo SMTP indica o endereo ou nmero IP do servidor SMTP. A opo sendmail_from indica o endereo do remetente da mensagem. necessrio reiniciar o servidor a cada modificao em algum arquivo de configurao. O prximo exemplo envia uma mensagem para o destinatrio. Cdigo com envio de e-mail <html> <head> <title>Pgina PHP</title> </head> <body> <?php $destinatario = "cristiano@urcamp.tche.br"; $assunto = "Como enviar e-mais via PHP"; $mensagem = " <h2>Envio de e-mails via PHP</h2> <p>Depois que o servidor est configurado, muito simples enviar e-mails com o PHP, usando apenas a funo mail(). Voc deve indicar como parmetros o destinatrio, o assunto, e a mensagem. Para enviar cabealhos adicionais, como informaes sobre o formato da mensagem, h um quarto parmetro.</p> "; $cabecalho = "

19

MIME-Version: 1.0\r\n Content-type: text/html; charset=iso-8859-1\r\n"; mail($destinatario, $assunto, $mensagem, $cabecalho); echo "e-mail enviado com sucesso"; ?> </body> </html> PHP e MySQL Introduo ao MySQL O MySQL o gerenciador de banco de dados mais usado com o PHP. Existem muitas funes pr-definidas para manipulao de conexes com bancos de dados. A funo mysql_connect tenta uma conexo com um servidor MySQL. Deve-se passar como parmetros: o nome do servidor (ou nmero IP) onde o MySQL est sendo executado, o nome de usurio e a senha deste usurio. O comando alternativo die trata um possvel fracasso na conexo. A funo mysql_selectdb seleciona qual base ser selecionada dentro do banco de dados que foi conectado. O comando alternativo die trata um possvel fracasso na seleo da base, podendo ser includa uma mensagem customizada. A funo mysql_query faz consultas base previamente selecionada. Deve-se passar, como parmetros, os comandos SQL apropriados. Novamente, o comando alternativo die pode tratar um no sucesso na consulta. Cdigo com conexo a um banco de dados MySQL, seleo de uma base teste e consulta todos os registros da tabela Clientes <html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados"); $consulta = "SELECT * FROM Clientes"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); echo "Consulta executada com sucesso"; ?> </body> </html> Exibio Para que os registros da consulta sejam exibidos, deve-se usar a funo mysql_fetch_assoc, que retorna uma matriz com a linha atual e move para a prxima. Para se imprimir todos os resultados de uma query, necessria a construo de uma estrutura de repetio (while) at que a funo mysql_fetch_assoc no retorne nenhum valor (vazio). Para melhorar a apresentao dos resultados, possvel usar tags HTML que incluam os dados dentro de tabelas, por exemplo. Cdigo com impresso de um registro a partir de uma consulta <html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados"); $consulta = "SELECT * FROM Clientes"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); $linha = mysql_fetch_assoc($resultado); $NomeDaEmpresa = $linha["NomeDaEmpresa"]; $NomeDoContato = $linha["NomeDoContato"]; echo "<b>Nome da empresa:</b> $NomeDaEmpresa<br>"; echo "<b>Nome do contato:</b> $NomeDoContato"; ?> </body> </html> Cdigo com impresso de todos registros a partir de uma consulta

20

<html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados"); $consulta = "SELECT * FROM Clientes"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); while ($linha = mysql_fetch_assoc($resultado)) { $NomeDaEmpresa = $linha["NomeDaEmpresa"]; $NomeDoContato = $linha["NomeDoContato"]; echo "<b>Nome da empresa:</b> $NomeDaEmpresa<br>"; echo "<b>Nome do contato:</b> $NomeDoContato<p>"; } ?> </body> </html> Consulta e Ordenao Pode-se fazer consultas atendendo a certos critrios, que vo fazer com que a consulta seja refinada. No prximo exemplo, desejamos selecionar apenas os clientes de So Paulo. Nesse caso, a clusula que deve ser alterada a que faz a consulta SQL. Cdigo com impresso de determinados registros que satisfazem uma condio (select ... from ... where ...) <html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados"); $consulta = "SELECT NomeDaEmpresa, NomeDoContato FROM Clientes WHERE Cidade = 'So Paulo'"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); while ($linha = mysql_fetch_assoc($resultado)) { $NomeDaEmpresa = $linha["NomeDaEmpresa"]; $NomeDoContato = $linha["NomeDoContato"]; echo "<b>Nome da empresa:</b> $NomeDaEmpresa<br>"; 38 echo "<b>Nome do contato:</b> $NomeDoContato<p>"; } ?> </body> </html> No caso de ordenao, a clusula order by deve ser anexada query SQL. Cdigo com impresso de determinados registros que satisfazem uma condio, ordenados por um dos atributos (select ... from ... where ... order by ...) <html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados");

21

$consulta = "SELECT NomeDaEmpresa, NomeDoContato FROM Clientes WHERE Cidade = 'So Paulo' ORDER BY NomeDoContato"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); while ($linha = mysql_fetch_assoc($resultado)) { $NomeDaEmpresa = $linha["NomeDaEmpresa"]; $NomeDoContato = $linha["NomeDoContato"]; echo "<b>Nome da empresa:</b> $NomeDaEmpresa<br>"; echo "<b>Nome do contato:</b> $NomeDoContato<p>"; } ?> </body> </html> Incluso e Atualizao Para se incluir dados em uma tabela MySQL, deve-se usar o comando INSERT. No exemplo a seguir, a incluso de dados esttica. Para se criar um aplicativo que permita incluso, seria necessrio adaptar o script para receber dados via formulrio e inclu-los no banco de dados. Cdigo com incluso de um registro em uma tabela do banco de dados <html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados"); $CodigoDoCliente = "EELTD"; $NomeDaEmpresa = "Editora Europa"; $NomeDoContato = "Rodolfo Melo"; $Cidade = "So Paulo"; $consulta = "INSERT INTO Clientes (CdigoDoCliente, NomeDaEmpresa, NomeDoContato, Cidade) VALUES ('$CodigoDoCliente', '$NomeDaEmpresa', '$NomeDoContato', '$Cidade')"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); echo "Dados adicionados com sucesso"; ?> </body> </html> O comando UPDATE altera um registro de uma tabela. No exemplo a seguir, o registro cujo cdigo EELTD passa a ter o nome Robinson Melgar. Cdigo com alterao de dados via comando update <html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados"); $CodigoDoCliente = "EELTD"; $NomeDoContato = "Robinson Melgar"; $consulta = "UPDATE Clientes SET NomeDoContato = '$NomeDoContato' WHERE CdigoDoCliente = '$CodigoDoCliente'"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); echo "Dados alterados com sucesso";

22

?> </body> </html> Excluso O comando SQL DELETE remove um registro de uma tabela. A clusula WHERE delimita a condio para que a remoo seja executada. Cdigo com remoo de registros <html> <head> <title>Pgina PHP</title> </head> <body> <?php $link = mysql_connect("127.0.0.1", "root", "") or die("No foi possvel conectar"); mysql_select_db("teste") or die("No foi possvel selecionar o banco de dados"); $CodigoDoCliente = "EELTD"; $consulta = "DELETE FROM Clientes WHERE CdigoDoCliente = '$CodigoDoCliente'"; $resultado = mysql_query($consulta) or die("Falha na execuo da consulta"); echo "Registro excludo com sucesso"; ?> </body> </html>

23