Desenvolvimento WEB Primeiro Semestre – 2008 - PHP Conceitos : Páginas dinâmicas em HTML – Aula 2 Diferença entre páginas Estáticas e Dinâmicas : As estáticas, normalmente desenvolvidas somente em HTML não exigem nenhum processamento por parte do Servidor. O Cliente WEB faz uma requisição, utilizando o protocolo HTTP , a um WebSite localizado em um Servidor Web. Ao receber a requisição o Servidor Web verifica a extensão da página a ser enviada como resposta, identificando a mesma como HTML não realiza nenhum processamento. Apenas a envia para o Cliente WEB. Todo o processamento está localizado no Cliente WEB. Estão inclusas nesta forma de publicação tecnologias como JavaScript e Flash. As páginas dinâmicas são desenvolvidas com linguagens que são executadas pelo servidor cuja característica é a geração dinâmica de HTML e acesso a Banco de Dados (entre outras tarefas) O Cliente WEB faz uma requisição, utilizando o protocolo HTTP , a um WebSite localizado em um Servidor Web. Ao receber a requisição o Servidor Web verifica a extensão da página a ser enviada como resposta, identificando a mesma como PHP (outra linguagem como ASP ou JSP poderia ser utilizada), A página é então enviada ao módulo responsável pelo processamento que realiza (realizando todas as operações necessárias com Banco de Dados, sessões etc) “devolvendo” ao servidor apenas o HTML resultante desta operação e a envia para o Cliente WEB. O processamento está localizado no Servidor e no Cliente WEB. Evolução das tecnologias de conteúdo dinâmico CGI = Common Gateway Interface – É o sistema mais antigo que existe para a programação das páginas dinâmicas de servidor. Atualmente se encontra um pouco defasado por diversas razões entre as quais se destaca a dificuldade com a que se desenvolvem os programas e a pesada carga que supõem para o servidor que os executa Funcionamento : Realiza-se uma petição http, a qual podem acompanhar dados que chegam ou por um formulário, ou também através da URL. O servidor executa os programas CGI aos que se acessa e trabalha com os recursos necessários para realizar as ações, como por exemplo, as bases de dados. O programa CGI vai escrevendo na saída padrão, o resultado da execução do CGI, que inclui etiquetas HTML, já que o que se escreve é uma página web. Desvantagens : Os resultados se escrevem diretamente com o CGI, portanto o código do programa se mistura com o do HTML tornando difícil sua compreensão e manutenção. Cada programa CGI que se coloca em funcionamento se faz em um espaço de memória próprio. Sendo assim, se três usuários colocam em funcionamento um CGI ao mesmo tempo, se multiplicará por três a quantidade de recursos que ocupa esse CGI. Isto significa uma grave ineficiência. ColdFusion = é uma ferramenta usada no desenvolvimento de aplicações web, que permite criar páginas Web dinâmicas para Internet, intranets ou extranets. O Cold Fusion utiliza uma linguagem denominada CFML (Cold Fusion Markup Language), baseada em tags, como o HTML. Esta linguagem é muito poderosa e simples de programar, perfeita para construção de páginas dinâmicas. Por ser suportado primordialmente pela Adobe Systems (veja histórico), o ColdFusion Server oferece boa interoperabilidade com outros produtos da mesma empresa, tais como Flash, Flex entre outros, sendo também uma escolha comum para aqueles que trabalham com estas tecnologias. O ASP (de Active Server Pages) é uma estrutura de programação em Script que se utiliza de VBScript, JScript, PerlScript ou Python processadas pelo lado servidor para geração de conteúdo dinâmico na Web. Ele roda nativamente em servidores Windows, através do serviço chamado de IIS (Internet Information Service) - o servidor web da Microsoft, ou do PWS (Personal Web Server) em ambientes com Windows 98. Além disso ele pode rodar em outras plataformas, como Linux no servidor Apache quando usando um Módulo de um programa como o Tomcat. O script é interpretado no lado do servidor e o que é enviado ao lado do usuário (navegador, por exemplo) é apenas a saída. que normalmente é uma linguagem de marcação como HTML, XHTML ou XML. Através dessa tecnologia também é possível executar consultas a Banco de Dados, através da biblioteca de componentes ActiveX. O uso desta tecnologia vem diminuindo sensivelmente pela maturação da tecnologia .NET, sendo gradativamente substituído pelo ASP.NET que proporciona uma gama maior de recursos e um melhor desempenho. PHP = PHP (um acrónimo recursivo para "PHP: Hypertext Preprocessor") é uma linguagem de programação de computadores interpretada, livre e muito utilizada para gerar conteúdo dinâmico na Web. Apesar de ser uma linguagem de fácil aprendizado e de uso para pequenos scripts dinâmicos simples, o PHP é uma linguagem poderosa orientada a objetos . Características: Orientação a objeto Portabilidade - Independência de plataforma - "write once run anywhere"; Sintaxe similar a Linguagem C/C++ e o PERL Java Servlets = Servlets são programas que correm no lado do servidor e que estendem as funcionalidades do servidor web, gerando páginas de forma dinâmica e interagindo com os clientes. Constituem a alternativa da tecnologia Java à programação em CGI (Common Gateway Interface), ultrapassando muitas das suas limitações e, o mais importante, numa base de independência de plataforma (sistema operativo) e de servidor web. JSP = JSP é a abreviação de Java Server Pages, que em português seria algo como Páginas de Servidor Java. É então, uma tecnologia orientada a criar páginas web com programação em Java. Com JSP podemos criar aplicações web que se executam em vários servidores web, de múltiplas plataformas, já que Java é em essência uma linguagem multiplataforma. As páginas JSP estão compostas de código HTML/XML misturado com etiquetas especiais para programar scripts de servidor em sintaxe Java. Portanto, poderemos escrever as JSP com nosso editor HTML/XML habitual. PHP e HTML Um programa escrito em PHP pode possuir comandos HTML e códigos PHP; Os comandos HTML devem aparecer fora das tags (?php e ?>, pois estas limitam um trecho de programa PHP. Dentro destas tags até podem existir comandos HTML, mas somente se utilizarmos o comando ECHO para escrevê-los. Cada script PHP existente na página deve começar com a tag<?php, e terminar com ?>. Ao final de cada linha de comando devemos terminar com um ; (ponto e vírgula), senão ocorrerão erros no momento da execução da página. Entre essas tags você pode escrever suas linhas de código em PHP, aproveitando tudo que a linguagem lhe oferece de recursos. Toda essa mistura do PHP com HTML é muito interessante, pois utilizamos o PHP para gerar dados dinamicamente e o HTML para formatar e exibir dados nas páginas mostradas no browser; Vamos ver este exemplo misturando HTML e PHP para mostrar somente a data atual : <html> <body> <?php $data_de_hoje = date (“d/m/y”,time()); ?> <p align=“center”>Hoje é dia <?php echo $data_de_hoje; ?></p> </body> </html> Perceba, no início do programa a atribuição à variável $data_de_hoje a data atual, utilizando o comando DATE. Depois utilizamos comandos HTML para escrever “Hoje é dia”, e completamos abrindo um novo trecho de PHP, escrevendo a data atual armazenada na variável $data_de_hoje por meio do comando ECHO que veremos logo a frente. Exibindo a página no Browser Para o browser mostrar alguma coisa na tela é necessário que a página tenha pelo menos um comando ECHO para escrever algo, ou então comandos HTML que escrevam o conteúdo da página. Portanto para realmente se ter conteúdo dinâmico na tela, você deve sempre se utilizar do comando ECHO ou algum outro comando PHP, pois como já dito o HTML é estático, imprime sempre as mesmas informações na tela. Exemplo de código <html> <body> <?php $time = “Gremio” $ano = 1983 $frase1=“O $time é o melhor clube de futebol do mundo !”; $frase2=“O $time foi campeão do mundo em $ano”; echo “<h3>$frase1</h3>”; echo “<h3>$frase2</h3>”; ?> </body> </html> O resultado desse código, será a impressão na tela conforme abaixo ? O Gremio é o melhor clube de futebol do mundo ! O Gremio foi campeão do mundo em 1983 Outra função muito importante que já poderemos utilizar é a PHPINFO. Ela nos fornece informações diversas sobre o PHP que estamos utilizando. Por exemplo, o estado atual do PHP. Isto inclui informações sobre as opções de compilação do PHP e extensões, a versão do PHP, informações do servidor e ambiente (se compilado como um módulo), o ambiente PHP, informação da versão do SO, caminhos, valores principais e locais das opções de configuração, cabeçalhos HTTP e a licença do PHP. Devido a configuração em cada sistema ser diferente, a função phpinfo() e normalmente utilizada para conhecer as definições de configuração e as variáveis predefinidas que estejam disponíveis no sistema. phpinfo() é também é uma ferramenta valiosa para eliminação de erros já que contém todos os dados de EGPCS (Environment, GET, POST, Cookie, Server). Opções do Comando ? INFO_GENERAL-valor=1-A linha de configuração, localização do php.ini data de construção, Servidor Web, Sistema e mais. INFO_CREDITS-valor=2-Créditos do PHP 4. Veja também phpcredits() INFO_CONFIGURATION-valor=4Valores locais e principais para as diretivas de configuração do PHP. Veja também ini_get(). INFO_MODULES-valor=8-Módulos carregados e suas respectivas configurações. Veja também get_loaded_modules(). INFO_ENVIRONMENT-valor=16Informação das variáveis de ambiente que também esta disponível em $_ENV. INFO_VARIABLES-valor=32-Mostra todas as variáveis predefinidas de EGPCS (Environment, GET, POST, Cookie, Server). INFO_LICENSE-valor=64Informação sobre a Licença do PHP. Veja também o faq sobre a licença. INFO_ALL-valor=-1-Mostra tudo acima. Este é o valor padrão. Exemplo do Código <?php // Mostra todas as informações, usa o padrão INFO_ALL phpinfo(); // Mostra apenas informações dos módulos. // phpinfo(8) mostra um resultado identico. phpinfo(INFO_MODULES); ?> Resumindo Temos a importância do comando ECHO : sem ele não conseguimos gerar dados dinâmicos, é fundamental dominar este comando; As variáveis : daqui por diante as usaremos muito. Lembrando que no PHP as variáveis sempre começam pelo símbolo cifrão ($). Sempre que houver este símbolo antes de qualquer nome o PHP o interpretará como uma variável. Conceitos Básicos PHP Caracteres de Escape Caracteres de escape são muito utilizados em programação. \n por exemplo significa nova linha e não é o único caracter de escape que existe. Veja abaixo alguns dos caracteres de escape mais utilizados: \a-=Alarme \cX=Control X, onde X pode ser qualquer caracter \e=Escape \f=Formfeed (alimentação de formulário) \n=Nova linha \r=Retorno de cabeçote (nova linha) \t=Tab \xHH=Caracter com código hexadecimal HH \DDD=Caracter com código octal DDD Exemplo de Escape <?php echo ("Hello world<br>\n"); echo (“Teste de PHP<br>\n"); echo (“Belo Teste!<br>\n"); ?> Comentar linhas no PHP Assim como existem comentários em HTML delimitados por <!-- e -->, em PHP também é possível comentar partes de um código. Para tal, quando se quer comentar uma única linha, utilizamos os caracteres // para comentar a linha que não será processada pelo todo. Quando é um número maior de linhas ou blocos, utilizamos " /* " para abrir o comentário, e para fechar " */ " Exemplo <? // Uma linha de comentario .. /* Um Simples bloco de comentario !!! */ ?> Escrevendo em um Documento com PHP Abrindo qualquer editor de textos já podemos escrever código PHP. Podemos digitar este exemplo como uma estrutura inicial de código : <html> <body> <?php //Legal, estou escrevendo um código echo “<h2 align=‘center’>Parabéns para mim!</h2>”; ?> </body> </html> Salve este programa como Prog1.php e envie para o diretório que você criou para hospedar seu site. Este programa vai gerar a frase “Parabéns para mim!” centralizada na página. WAMP WAMP é acrônimo para a combinação: Windows, Apache, MySQL, PHP O WAMP é o instalador do servidor Apache, do banco de dados Mysql e da linguagem PHP para o sistema operacional Windows. Também é possível encontrar instaladores para outros sistemas operacionais: LAMP – Linux MAMP – Mac OS SAMP – Soliaris É possível baixar o WAMP em: http://www.wampserver.com ou em superdownloads, por exemplo, basta procurar por WAMP; Depois de efetuar a download, basta executar o programa e seguir os passos de instalação que o Apache, o MySQL, o PHP e uma ferramenta denominada PHPMyAdmin (que permite criar e manipular BD MySQL) estarão instalados e prontos para seram utilizados. Em cada um desses pacotes, é necessário verificar qual o diretório onde devemos salvar os arquivos PHP para posteriormente acessar no navegador através do endereço http://localhost/nome_arquivo.php ou http://ip_da_maquina/nome_arquivo.php para que os comandos PHP sejam interpretados e seja gerada uma resposta HTML que será enviada ao navegador; Depois de efetuar a instalação do PHP e do Apache, seja com um pacote de configuração automático ou manualmente, para testar se está tudo funcionando basta abrir um editor de texto, digitar o código abaixo: <?= phpinfo(); ?> Salvar com o nome teste.php no diretório específico (ex: C:/wamp/www) e acessar no navegador (http://localhost/teste.php); Uma das vantagens de se utilizar uma linguagem dinâmica que roda do lado do servidor, como o PHP, é que além de ser possível acessar Banco de Dados, efetuar o envio de dados por e-mail, permitir o upload de arquivos, gerar gráficos, etc... não ficamos mais “presos” a tecnologia que temos no cliente; Se pensarmos, por exemplo, na validação de um formulário feita com JavaScript, é necessário que o navegador do cliente suporte JavaScript e também que a execução de scripts esteja habilitada, caso contrario de nada valerá a validação e o cliente poderá submeter o formulário com campos obrigatórios em branco ou com campos preenchidos de forma errada; Se essa mesma validação fosse efetuada no servidor, isso não ocorreria. Claro que também temos que pensar que no caso de muitos acessos simultâneos, efetuar a validação do formulário no servidor poderia sobrecarregá-lo, já a validação no cliente, além de mais rápida, não sobrecarregaria o servidor. Outra diferença entre o PHP e o JavaScript, é que no PHP a lógica fica protegida, ou seja, mesmo que o cliente exiba o código fonte da página, os comandos PHP não serão exibidos pois quando é feita a solicitação de uma página PHP, os comandos são interpretados e é gerada uma resposta HTML que será enviada para o navegador do cliente, vejamos o exemplo abaixo: Abra o bloco de notas e digite o código abaixo e salve como teste2.php: Abra no navegador este código. Clique na opção Código Fonte do menu Exibir e verifique que a resposta que foi enviada ao navegador só possuir comandos HTML ; Constantes São valores que são predefinidos no início do programa e que não mudam ao longo de sua execução. Você pode definir suas próprias constantes utilizando o comando DEFINE, que possui a sintaxe : Bool define(string nome, misto valor[,bool case_insensitive]) onde: Nome=nome que você vai usar para representar a constante; Valor=é um valor qualquer numérico ou alfanumérico a ser atribuído a ela; Case_insensitive=valor lógico, true ou false, que indica se o php deve diferenciar letras maiúsculas e minúsculas quando houver uma referência a essa constante. Veja o exemplo : <html> <body> <?php define(“meunome”,”juliano”); define(“peso”,78); echo “O meu nome é “.meunome; echo “<br>” echo “O meu peso é “.peso.” quilos”; ?> </body> </html> O resultado da execução deste programa será : O meu nome é juliano O meu peso é 78 quilos Note que para as constantes não utilizamos o símbolo $. Este símbolo só é utilizado para definição de variáveis; Outro recurso apresentado e muito utilizado é o .(ponto). Com ele podemos concatenar quantos dados quisermos, e todos eles serão exibidos como apenas uma sequência de caracteres. Além das constantes que você cria, o PHP possui diversas constantes próprias predefinidas, veja a seguir: TRUE=valor verdadeiro, utilizado em comparações; FALSE=valor falso; _FILE_=contém o nome do script que está sendo executado; _LINE_=contém o número da linha do script que está sendo executado; PHP_VERSION=contém a versão corrente do php; PHP_OS=nome do sistema operacional onde o php está rodando; E_ERROR=exibe um erro ocorrido em um script. A execução é interrompida; E_WARNING=exibe uma mensagem de aviso do pho, a execução não pára; E_PARSE=exibe um erro de sintaxe, a execução é interrompida; E_NOTICE=mostra que ocorreu algo,mas não necessariamente um erro. A execução não pára. Variáveis As variáveis servem para armazenar dados que podem ser usados em qualquer parte do programa.Cada variável está associada a uma posição de memória em seu computador. Ao contrário das linguagens tradicionais, como delphi, C, Pascal, no PHP não é necessário fazer declaração de variáveis. Basta atribuir diretamente um valor a ela e a partir desse momento já está criada e associada a um tipo , dependendo do valor que lhe foi atribuído; Exemplos de Variáveis Válidas $nota1 $casa120 $bisc8 $futebol_brasileiro Exemplo de Variáveis Inválidas $100vezes $5 $20_numero Atente sempre para nunca criar variáveis que comecem com números, o PHP não aceita isso; Crie sempre nomes de variáveis que tentem descrever ao máximo o que elas irão fazer. Quando criar uma variável, cuidado com as letras maiúsculas e minúsculas. Por exemplo, $NotaAluno é diferente de $notaAluno, que é diferente de $notaaluno que é diferente de $NOTAALUNO. Escopo das Variáveis Podemos utilizar a mesma variável em locais e momentos diferentes, embora isso não seja muito interessante de ser feito. Uma variável declarada dentro de uma função só funciona dentro da função. Fora dali seu valor não está acessível em nenhuma parte do programa. No entanto, se quisermos, podemos usar dentro de uma função o valor de uma variável existente dentro do programa principal e para isso existem duas maneiras : 1) Definí-la como Global no início do programa; 2) Utilizar o array predefinido $GLOBALS, que utiliza os nomes das variáveis como chave associativa. Vejamos alguns exemplos ? <?php $num=5000; function testa_variavel() { $num +=5; //somei seu conteúdo com 5 echo $num.”<br>”; } echo $num.”<br>”; testa_variavel(); ?> Após a execução deste programa serão mostrados na tela os valores 5000 e na linha de baixo 5. Isso ocorre porque quando somamos o conteúdo da variável $num dentro da função (note que dentro da função ela não vale nada) o resultado será 5. O valor de 5000 está fora da função ! Utilizando o valor de uma variável global dentro da função <?php $num=5000; function testa_variavel() { global $num; $num +=5; //somei seu conteúdo com 5 echo $num.”<br>”; } echo $num.”<br>”; testa_variavel(); ?> Os valores mostrados no exemplo anterior serão de 5000 e 5005 na linha de baixo. Isso porque dentro da função especificamos que a variável $num que será utilizada é global, então, altera-se o valor dela com a soma, ela entra na função valendo 5000, somandose mais 5 temos 5005. Vejamos agora o exemplo utilizando o array $GLOBALS : <?php $num=5000; function testa_variavel() { echo $GLOBALS[“num”].”<br>”; $GLOBALS[“num”]++; } testa_variavel(); echo $num; ?> Os valores impressos serão 5000 e 5001. Isso porque logo no início da função, o programa imprime o valor da variável global $num. Na linha de baixo existe um incremento utilizando o array $GLOBALS com a chave associativa (++) em um, passando a valer 5001. Conversão de Variáveis Se tivermos uma string contendo somente números e quisermos somar esses números, o PHP irá automaticamente convertê-los em numérico e realizar o cálculo. Se houver textos e números em uma string, o PHP utilizará somente os números e realizará a conta. Exemplo : $string = “5”; $numero = 3; $texto = “3 vezes campeão”; Se somarmos $numero+$string, o resultado será 8; Se somarmos 3.45+$string, o resultado será 8.45. Se somarmos $numero+$texto, o resultado será 6, pois somente a parte numérica da string será considerada; Conversão Manual de Variáveis Int,integer = converte para inteiro; Real, float, double = converte para ponto flutuante; String = converte em string; Array = converte em vetor; Object = converte em objeto. Exemplo : <?php $x = 50; $y = 2,35; $soma = (int) $y + $x; echo $soma; ?> No exemplo, a variável $y é do tipo float, foi convertida para inteiro por meio do conversor int; Se quiséssemos converter o resultado de toda uma expressão para inteiro, bastaria colocar os parênteses para delimitar expressão cujo resultado deve ser convertido. Por exemplo : $soma=(float)($x+$y); Tipos de Variáveis Numéricas = valores inteiros ou reais; Exemplo $numero = 10 ou $y = 15.002 Alfanuméricas ou Strings = cadeias de caracteres que podem ser delimitados por aspas simples ‘ ou duplas “;Exemplo $nome=‘Glaucio’ ou $profissao=“professor” Arrays = ou vetor, podem armazenar vários valores ao mesmo tempo, pois se trata de uma estrutura de armazenamento que possui um identificador além de um índice associado, onde cada índice indica uma posição de memória em que fica armazenado o elemento do array. O índice aparece entre colchetes[] logo após o identificador do array. Exemplo : $vetor[0] = 30; $vetor[1] = 40; $vetor[“time”] = “Santos”; Veremos mais adiante a utilização correta dos arrays e seus casos de aplicação. Objetos = é um tipo de variável que serve para instanciar uma classe. Um objeto pode acessar funções pré definidas numa classe; Teremos mais adiante um aprofundamento em Orientação a Objetos, quando veremos a aplicação deste tipo de variável mais detalhadamente. Operadores Operadores aritméticos = utilizados para qualquer cálculo matemático, somar, subtrair, multiplicar, dividir e etc. São eles : + adição - subtração * multiplicação / divisão % resto da divisão Existem também os operadores aritméticos que atuam apenas em um operando e nos são úteis para incrementar, decrementar ou trocar sinais, são eles : -oper – troca o sinal do operando; ++oper – primeiro incrementa o valor do operando e depois realiza a operação; --oper - primeiro decrementa o valor do operando e depois realiza a operação; Oper++ - primeiro realiza a operação e depois realiza o incremento; Oper-- - primeiro realiza a operação e depois realiza o decremento; Se o objetivo for somente incrementar o valor de uma variável, digita-se o nome da variável seguido do operador ++, por exemplo : $variavel ++; Exemplo de Código : <html> <body> <?php $a=1; $b=3; $c=5; $res1=++$b - $a; $res2=$c-- + $a; $res3= --$a+$c++; echo”a = $a<br> b = $b<br> c = $c<br><br>”; echo “res1 = $res1<br> res2 = $res2<br> res3 = $res3<br>”; ?> </body> </html> O resultado em tela deverá ser o seguinte ? a=0 b=4 c=5 res1 = 3 res2 = 6 res3 = 4 Operadores Relacionais Permitem comparar duas ou mais variáveis; Com eles podemos testar se uma variável é maior que a outra ou se possui um valor maior que determinado numero ou ainda se o retorno de uma função foi verdadeiro ou falso. Veja a tabela a seguir ? op1==op2 – verdadeiro se op1 for igual a op2; op1>=op2 – verdadeiro se op1 for maior ou igual a op2; op1<=op2 – verdadeiro se op1 for menor ou igual a op2; op1!=op2 – verdadeiro se op1 for diferente de op2; op1<>op2 – também serve para representar diferença; op1>op2 – verdadeiro se op1 for maior que op2; op1<op2 – verdadeiro se op1 for menor que op2. Operadores de Atribuição São operadores utilizados para representar a colocação de um valor em uma variável; A variável sempre estará do lado esquerdo do operador e o valor ou expressão a ser atribuído sempre do lado direito. Veja o quadro dos operadores disponíveis : Op1=op2 – op1 recebe o valor de op2; Op1+=op2 - equivale a op1=op1+op2; Op1-=op2 – equivale a op1=op1-op2; Op1*=op2 – equivale a op1=op1*op2; Op1/=op2 – equivale a op1=op1/op2 Op1.=op2 – Concatenação. Equivale a op1.op2; Op1%=op2 – equivale a op1=op1%op2; Cuidado ao usar = e == . O comando = é de atribuição e o == é de comparação ! Exemplo com comandos de atribuição : <html> <body> <?php $soma=0; $valor1=10; $valor2=20; $valor3=30; $soma += $valor1; //$soma fica com 10 $soma += $valor2; //$soma fica com 10+20=30 $soma *= $valor3; //$soma fica 30*30=900 $soma %= 100; //$soma fica com 900%100=0 echo $soma; ?> </body> </html> Operadores Lógicos São todos aqueles que nos retornam um valor verdadeiro ou falso : !op1 – verdadeiro se op1 for falso; op1ANDop2 – verdadeiro se op1 E op2 forem verdadeiros; op1ORop2 – verdadeiro se op1 OU op2 forem verdadeiros; op1XORop2 – verdadeiro se SÓ op1 ou SÓ op2 for verdadeiro; Op1&&op2 – verdadeiro se op1 E op2 forem verdadeiros; Op1||op2 – verdadeiro se op1 OU op2 forem verdadeiros; Atenção para os operadores AND e && e OR e ||. A diferença básica entre eles está na precedência. A precedência mais alta é dos operadores && e || e a mais baixa está no AND e OR. Cuidado ao utilizá-los pois seus resultados serão diferentes. No próximo tópico trataremos da precedências desses operadores. Exemplo de código : <html> <body> <?php ... if (empty($nome) OR empty(&email) OR empty($cpf)) { echo”Você deve preencher os campos NOME,E-MAIL e CPF !”; exit; } ... ?> </body> </html> Tabela de resultados gerada pelos operadores lógicos AND (E) V–V=V V–F=F F–V=F F–F=F OR(OU) V–V=V V–F=V F- V=V F- F=F XOR (OU EXCLUSIVO) V–V=F V–F=V F–V=V F–F=F !(NOT) V=F F-V Precedência dos Operadores Nada mais é que a ordem que os programas em PHP tratam a ordem de seus operadores. Na tabela a seguir estão listados os operadores em ordem DECRESCENTE de precedência : -!~++- = negativo, não logico, inversão de bits, incremento e decremento; */% = multiplicação, divisão e resto de divisão; +-. = adição, subtração e concatenação; <<>> deslocamentos binários; >< >= <= = maior, menor,maior ou igual, menor ou igual; == != <> = iguale diferente; & = AND binário; ^ = XOR binário; | = OR binário; && = AND lógico; || = OR lógico; ?: = Operador ternário; = += -= *= /= %= &= ~= <<= >>= ^= = Operadores de atribuição; AND = AND lógico (de menor prioridade); XOR = XOR lógico (de menor prioridade); OR = OR lógico (de menor prioridade). Observações Sempre será executado primeiro as operações que estiverem entre parênteses. Se dentro dos parênteses houver diversas operações, daí sim será aplicada pelo PHP a precedência para definir a ordem. Quando existirem operadores da mesma precedência em uma operação, o PHO começa a resolver a expressão sempre da esquerda para a direita. Exemplo de Código: <?php $num = 5; $resultado = 8+3*2 + ++$num; echo “$num<br>”; echo $resultado; ?> O resultado será : 6 20 O operador ++ tem prioridade em relação aos operadores + e *, portanto o programa primeiro incrementou $num, passando a vale 6. O segundo operador que tem precedência é o *, então realizou-se a operação 3*2 = 6. Depois ficamos então com a soma de 8+6+6. 8+6=14 e depois 14+6=20. Arrays Os arrays podem ser vistos como uma forma de lista indexada de variáveis (array unidimensional), ou como uma tabela (array bidimensional), e podem conter qualquer tipo de dados (caracter, inteiro, decimal, string). Este tipo de estrutura de dados, é bastante funcional, quando estamos tratando informações relacionadas. Exemplo : imaginemos que estamos fazendo uma lista de compras, e nessa lista queremos produtos tal com couves, batatas, laranjas, maçãs, e peras. Sem usar arrays, teríamos que ter qualquer coisa do tipo: $produto1="Batatas"; $produto2="Laranjas"; $produto3="Maças"; $produto4="Pêras"; Se quisermos saber quantos produtos temos, teríamos que verificar se a variável $produtoX tem, ou não, um valor. Com arrays é diferente!. Ao invés de ter as variáveis a parte, temos uma "lista" de elementos. Exemplo da lista de produtos com array: $produto[0]="Batatas"; $produto[1]="Laranjas"; $produto[2]="Maçãs"; $produto[3]="Pêras"; Outra forma de criar um array, é usado a função"array()" do php: $produto=array("Batatas","Laran jas","Maçãs","Peras"); Pode parecer que não mudou muito, ou até que é mais complicado por levar os parênteses , mas na verdade, este tipo de estrutura de dados, é muito mais vantajosa. Ao invés de termos varias variáveis, temos uma lista de elementos, dentro do array $produto: Assim, o elemento 0 ($produto[0]) do array $produto tem o mesmo valor que tinha a variável $produto1; o elemento 1 ($produto[1]) tem o mesmo valor que tinha a variável $produto2; e assim sucessivamente. Isto é bastante útil, porque a qualquer momento, eu posso perguntar: "Quantos elementos tem o array $produto?" e automaticamente obtenho o numero de produtos da minha lista de compras. Os arrays podem ser indexados por um numero inteiro, ou uma palavra associada: $numero[0]=1; $idade["Dragon"]=22; Se utilizarmos arrays bi-dimensionais, podemos construir uma tabela. Exemplo: Construir uma lista de compras para o Ze e para a Maria: $produto["Ze"][0]="Batatas"; $produto["Ze"][1]="Laranjas"; $produto["Ze"][2]="Maças"; $produto["Ze"][3]="Pêras"; $produto["Maria"][0]="Chocolates"; $produto["Maria"][1]="Doces"; Funções de Manipulação de Array Array array array(...); É a função que cria um array a partir dos parâmetros fornecidos. É possível fornecer o índice de cada elemento. Esse índice pode ser um valor de qualquer tipo, e não apenas de inteiro. Se o índice não for fornecido o PHP atribui um valor inteiro sequencial, a partir do 0 ou do último índice inteiro explicitado. range array range(int minimo, int maximo); A função range cria um array cujos elementos são os inteiros pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parâmetro for maior do que o do segundo, a função Devolve false (valor vazio). shuffle void shuffle(array &arr); Esta função "embaralha" o array, ou seja, troca as posições dos elementos aleatoriamente e não Devolve valor algum. sizeof int sizeof(array arr); Devolve um valor inteiro contendo o número de elementos de um array. Se for utilizada com uma variável cujo valor não é do tipo array, Devolve 1. Se a variável não estiver setada ou for um array vazio, Devolve 0. Funções de Ordenação de Arrays São funções que servem para ordenar os elementos de um array de acordo com determinados critérios. Estes critérios são: manutenção ou não da associação entre índices e elementos; ordenação por elementos ou por índices; função de comparação entre dois elementos. sort void sort(array &arr); A função mais simples de ordenação de arrays. Ordena os elementos de um array em ordem crescente, sem manter os relacionamentos com os índices. rsort void rsort(array &arr); Funciona de maneira inversa à função sort. Ordena os elementos de um array em ordem decrescente, sem os manter os relacionamentos com os índices. asort void asort(array &arr); Tem o funcionamento bastante semelhante à função sort. Ordena os elementos de um array em ordem crescente, porém mantém os relacionamentos com os índices. arsort void arsort(array &arr); Funciona de maneira inversa à função asort. Ordena os elementos de um array em ordem decrescente e mantém os relacionamentos dos elementos com os índices. ksort void ksort(array &arr); Função de ordenação baseada nos índices. Ordena os elementos de um array de acordo com seus índices, em ordem crescente, mantendo os relacionamentos. usort void usort(array &arr, function compara); Esta é uma função que utiliza outra função como parâmetro. Ordena os elementos de um array sem manter os relacionamentos com os índices, e utiliza para efeito de comparação uma função definida pelo utilizador, que deve comparar dois elementos do array e devolver 0, 1 ou -1, de acordo com qualquer critério estabelecido pelo utilizador. uasort void uasort(array &arr, function compara); Esta função também utiliza outra função como parâmetro. Ordena os elementos de um array e mantém os relacionamentos com os índices, utilizando para efeito de comparação uma função definida pelo utilizador, que deve comparar dois elementos do array e devolver 0, 1 ou -1, de acordo com qualquer critério estabelecido pelo utilizador. uksort void uksort(array &arr, function compara); Esta função ordena o array através dos índices, mantendo os relacionamentos com os elementos., e utiliza para efeito de comparação uma função definida pelo utilizador, que deve comparar dois índices do array e devolver 0, 1 ou -1, de acordo com qualquer critério estabelecido pelo utilizador. Estruturas de Controle – Comandos Condicionais Com estes comandos temos a oportunidade de avaliar uma expressão, onde, dependendo do seu resultado, executar um trecho de código diferente. Sempre que há necessidade de uma tomada de decisões utilizamos esses comandos. Os comandos condicionais são IF e SWITCH. IF => comando que avalia a expressão e dependendo do resultado executa um conjunto diferente de instruções.O IF pode possuir como complemento o ELSEIF e/ou o ELSE. Veja a sintaxe : If (expressão1) {bloco1} elseif (expressão 2) {bloco2} else {bloco3} A leitura se assim ? Se expressão 1 for verdadeira, execute bloco1; Senão se expressão2 for verdadeira, execute bloco2; Senão execute bloco3. Exemplo de código : <?php $prova1=7; $prova2=5; $nota=($prova1+$prova2)/2; if ($nota<3) $desempenho= “PESSIMO”; elseif ($nota<5) $desempenho= “RUIM”; elseif ($nota<7) $desempenho= “MEDIO”; elseif ($nota<9) $desempenho= “BOM”; else $desempenho=“EXCELENTE”; echo “O seu desempenho foi $desempenho”; ?> Outro exemplo : <?php if ($nota ==10) { echo “Parabéns! <br>”; echo “Você tirou a nota máxima!”; } ?> Neste exemplo, somente se a nota for = 10 será executado o bloco todo, caso contrário não acontecerá nada. SWITCH É parecido com o comando IF, pois ambos avaliam o valor de uma expressão para escolher qual bloco de instruções deve ser executado. Algumas vezes você tem a mesma variável a ser testada com valores diferentes, nesse caso o mais indicado é comando SWITCH, que trabalha com o operador de igualdade, enquanto o IF trabalha com qualquer tipo de operador. O SWITCH torna o código mais limpo que o IF, pois este se utiliza apensa de uma cláusula (CASE), enquanto o IF utilizada várias(if,elseif,else e as vezes endif). Exemplo de código : Switch (operador) { case valor1: comandos break; case valor2: comandos break; } Perceba que após cada bloco de comandos sempre utilizamos o comando BREAK, para que o SWITCH seja encerrado e a execução continue após ele, caso contrário o PHP continua a execução do programa dentro do SWITCH, avaliando as demais expressões. Exemplo com IF : <?php ... If ($numero == 0) { echo “numero vale 0”; } elseif ($numero ==1) { echo “numero vale 1”; } elseif ($numero ==2) { echo “numero vale 2”; } ... ?> Exemplo com SWITCH <?php ... Switch ($numero) { case 0: echo “numero vale 0”; break; case 1: echo “numero vale 1”; break; case 2: echo “numero vale 2”; break; } ... ?> No comando SWITCH também podemos utilizar a opção DEFAULT, que tem a mesma função do ELSE no comando IF. Lembrando que o comando DEFAULT NÃO É OBRIGATÓRIO no comando SWITHC. Veja um exemplo : <?php ... Switch ($opcao) { case ‘s’ : echo “Você escolheu SIM”; break; case ‘n’ : echo “Você escolheu NÃO”; break; default : echo “A opção digitada é inválida”; break; } ?> Comando de Repetição WHILE – em português significa enquanto. Ele avalia a expressão e enquanto a expressão for verdadeira, a execução do mesmo bloco se repetirá. Quando se tornar falso, a execução vai para o final do comando WHILE Sintaxe : While (expressão) { comandos } Atenção para não colocar dentro do comando WHILE expressões que jamais se tornarão falsas, senão teremos um loop infinito dentro do programa. Exemplo de código : <?php $cont=1; while ($cont<100) { echo “O valor atual do contador é $cont <b>”; $cont++; } ?> A execução desse programa resultará em 99 linhas mostradas na tela. Se ao invés de usarmos $cont<100 usássemos a expressão $cont!=0 (diferente de 0), teríamos neste caso um loop infinito. DO WHILE = A diferenã entre o DO WHILE e o WHILE é que o while avalia a expressão no inicio do laço e o DO WHILE no final do laço, portanto, utilizando o DO WHILE o laço será executado pelo menos uma vez, enquanto que no WHILE o laço pode não ser executado, caso na primeira avaliação a expressão avaliada retorne falso. Sintaxe : Do { comandos } While (expressão) Exemplo de Código : <?php $numero=1; do { echo “O valor atual do número é $numero <br>”; $numero++; } while ($numero<4); ?> O resultado apresentado será O valor atual do número é 1 O valor atual do número é 2 O valor atual do número é 3 Comando FOR = utilizado quando queremos executar um conjunto de instruções um certo número de vezes. Por exemplo, pode ser útil quando se quer imprimir todos os elementos de um array, ou todos os registros que retornaram de uma consulta de um banco de dados. Sintaxe = For (inicialização;condição;operador) { comandos } Ou ainda ? For (inicialização;condição;operador) comandos Endfor; Onde : Inicialização = onde determinamos o valor inicial da variável que vai controlar o loop, por exemplo $cont=0; Condição = a condição que deve ser atingida para que o loop continue, exemplo, para executar o loop 20 vezes, a condição seria $cont<20. Operador = usado para autalizar o valor da variável de controle do loop, fazendo incremento ou decremento. Ao final de cada iteração do loop, o valor da variável de controle é automaticamente atualizado. Exemplo de código : <?php for($cont=0;$cont<10;$cont++) { echo”A variável \$cont vale $cont”; echo”<br>”; } ?> O resultado gerado pela execução desse programa será o seguinte : A variável $cont vale 0 A variável $cont vale 1 A variável $cont vale 2 A variável $cont vale 3 ... A variável $cont vale 9 <html> <body> <?php echo”Contagem regressiva: <br>”; for($i=15;$i>=0;$i--) { echo $i.”,”; } echo”...FIM !”; ?> </body> </html> O resultado será o seguinte : 15,14,13,12,11,10,9,8,7,6,5,4,3,2, 1,0...FIM ! Apesar de pouco comum, podemos ter mais de uma variável na inicialização do FOR e mais de um operador no terceiro parâmentro. Basta utilizar a vírgula, veja o exemplo : <?php for($i=0,$k=10;$i<10;$i++,$k--) { echo”\$i vale $i e\$k vale $k”; if ($i==$k) { echo”(os valores são iguais !)”; } echo “<br>”; } ?> A tela deverá aparecer assim : $i vale 0 e $k vale 10 $i vale 1 e $k vale 9 $i vale 2 e $k vale 8 $i vale 3 e $k vale 7 $i vale 4 e $k vale 6 $i vale 5 e $k vale 5(os valores são iguais!) $i vale 6 e $k vale 4 $i vale 7 e $k vale 3 $i vale 8 e $k vale 2 $i vale 9 e $k vale 1 Comando FOREACH = só funciona do php4 em diante. É o tipo de comando que nos permite “navegar” entre os elementos de um array muito mais facilmente. Sintaxe = Foreach($nome_array as $elemento) { comandos } Comando BREAK = termina a execução do comando atual, que pode ser um if, for, while ou switch. Quando este comando é encontrado o fluxo de execução passa para o primeiro comando após o término dessa estrutura. É um grande recurso que pode ser utilizado para forçar a saída de um laço ou de um comando condicional <?php ... $k = 1; while ($k<20) { if($vetor[$k]==“Sair”) { break; } echo $vetor[$k].”<br>”; $k++; } ?> 1) 2) Este programa apresentará na tela os valores de um vetor qualquer. O looping será encerrado de duas formas : Se o valor de $k for maior ou igual a 20; Se algum elemento do vetor possuir o valor “sair”. O comando BREAK também aceita um argumento numérico como opcional, que diz o número de estruturas que deverá ser finalizado. Portanto, utilizar o break seria a mesma coisa que usar um break1. <?php $i=0; $k=0; while ($k<10) { $i++; $k++; while ($i<20) { if($i==10) { echo”Encerrando o primeiro while...<br>”; break; echo”Esta linha não vai ser impressa.”; } elseif($i==15) { echo”encerrando os dois whiles...”; break2; } $i++; } } ?> No exemplo, quando a variável $i chegar ao valor 10, a execução passa para dentro do if, e quando o break é executado termina imediatamente a execução do laço atual. Logo após, o comando echo não será executado. Quando $i chegar a 15, o comando executado será o break2. Sendo assim, as duas estruturas de repetição serão finalizadas. A execução continuará após os dois whiles. Esse é o principal objetivo do comando break. Comando CONTINUE = utilizado dentro dos comandos de repetição para ignorar o restante das instruções pertencentes ao laço corrente e ir para a próxima iteração voltando ao início do laço. <?php $vetor=array(1,3,5,8,11,12,15,20); for($i=0;$si<sizeof($vetor);$i++) { if($vetor[$i]%2 !=0) //é impar { continue; } $num_par=$vetor[$i]; echo”O numero $num_par é par.<br>”; } ?> A função SIZEOF nos devolve o numero de elementos do array, no caso, 8. O FOR passa por todos os elementos do array, mas somente os numeros pares aparecerão na tela. No comando if o programa testa se o resto de alguma divisão é diferente de zero, ou se o número é impar. Se ele encontrar um numero impar, o comando continue é executado e os comandos seguintes não serão executados. Sendo assim a execução retorna ao início do laço e o proximo elemento do vetor é acessado. No final do laço só teremos valores pares mostrados na tela, pois o comando continue evitou que os ímpares fossem mostrados. Funções São trechos de código que realizam qualquer tipo de tarefa, como por exemplo validar um cpf, converter letras minúsculas para maiúsculas, somar números e etc. As funções podem ser acionadas a qualquer momento em qualquer parte do programa. Sintaxe : Function nomeFunção(arg1,arg2...) { comandos [return <expressão>] } O nome da função deverá ser um identificador com um nome único no programa. Este não deve iniciar com um número e não é permitido a utilização de caracteres como ponto, vírgula, espaço e etc. O _(sublinhado) é bastante utilizado em nome de funções. Uma função numa chamada recebe diversos valores que chamamos de argumentos, que são valores recebidos no momento da chamada e que serão processados no código da função. A utilização desses parâmetros é opcional e se a função não necessita de parâmetros, deve ser declarada apenas function nomeFuncao() Quando o php encontrar uma chamada a uma função, a execução do programa é interrompida e o fluxo de execução passa para o início do código da função. Quando acabar a execução da função o programa vai para a próxima linha de quando ele parou antes de executar a função. Existe um comando opcional nas funções que é o return. Ele existe para quando quisermos retornar um valor da função para o ponto de onde foi chamada. Utilizamos return em duas situações : Exemplo : <?php function cubo($valor) { $cubo=$valor*$valor*$valor; return $cubo; } $valor = 7; echo “O cubo de $valor é “ . cubo($valor); ?> 1) 2) – quando queremos atribuir o valor retornado a uma variável; - quando queremos testar o valor de retorno de uma função; A função também pode simplesmente não retornar nenhum valor, simplesmente executar alguns cálculos e exibir alguma coisa na tela. Criando Funções Exemplo : <?php function soma_valores($valor1,$valor2,$valor3) { $soma=$valor1+$valor2+$valor3; echo”A soma dos valores $valor1, $valor2, $valor3 é $soma”; } $n1=10; $n2=20; $n3=50; soma_valores($n1,$n2,$n3); ?> Passagem de Parâmetros :valor e referência Se uma função recebe como argumento uma variável, por exemplo $teste que possui o valor 10, quando a função acabar de se executar a variável terá ainda o mesmo valor, isso fica inalterado indiferente do que aconteça dentro da função. A isso chamamos de passagem de parâmetros por valor. Existem casos que queremos que o valor da variável se altere na execução da função. A esse processo chamamos de passagem de valores por referência. Para isso, devemos colocar o símbolo & antes do nome da variável. <?php function dobro($valor) { $valor = 2*$valor; } function duplica (&$valor) { $valor=2*$valor; } $valor=5; dobro($valor); echo $valor . “<br>”; duplica ($valor); echo $valor; ?> A grande diferença entre passagem por valores e passagem por referência é que por referência o php altera os valores diretamente na variável aplicada, e por valores é feita uma cópia do conteúdo da variável e as alterações são feitas nessa cópia, não refletindo na variável original portanto. Funções de Data e Hora Você pode usar estas funções para tratar com a data e a hora. Estas funções permitem conseguir a data e a hora do servidor onde o PHP está rodando. Você pode usar estas funções para formatar a saída de data e hora de muitas maneiras diferentes. Obs: Tenha em mente que estas funções dependem das configurações locais do servidor. Considerar especialmente horário de verão e anos bissextos. Algumas Funções : checkdate -- Valida uma data/hora; Sintaxe = bool checkdate ( int month, int day, int year); Retorna TRUE se a data dada é válida; caso contrário retorna FALSE. Checa a validade da data formada pelos argumentos. Uma data é considerada válida se: o year está entre 1 e 32767 o month está entre 1 e 12 Day deve está dentro do número de dias permitidos para o dado month. years são levados em consideração. Date = Formata a data e a hora local ; Sintaxe : string date ( string format [, int timestamp]) Retorna uma string de acordo com o formato da string usando o inteiro dado timestamp ou a hora corrente local se nenhum timestamp é dado. Nota: A linha válida de um timestamp é tipicamente de Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (Estas são as datas que correspodem aos mínimos e máximos valores para um inteiro de 32-bit definido). No windows esta linha é limitada de 01-01-1970 para 19-012038. Para gerar um timestamp de uma string para representação de data, você deve estar capaz de usarstrtotime(). Adicionalmente, alguns bancos de dados têm para converter suas datas em timestamps (tais como a função MySQL's UNIX_TIMESTAMP ). GetDate = Consegue informações data/hora ; Sintaxe = array getdate ( [int timestamp]) ; Retorna uma matriz contendo a data do timestamp, ou a hora corrente local se se nenhum timestamp é dado, como a seguintes elementos da matriz: "seconds" - segundos "minutes" - minutos "hours" - horas "mday" - dia do ano "wday" - dia da semana, numérico : de 0 como Domingo até 6 como Sábado "mon" - mês, numérico "year" - ano, numérico "yday" - dia do ano, numérico; i.e. "299" "weekday" - dia da semana, texo, completo; i.e. "Friday" "month" - mês, texto, completo; i.e. "January" Exemplo : $today = getdate(); $month = $today['month']; $mday = $today['mday']; $year = $today['year']; echo "$month $mday, $year"; Mktime =Obtém um modelo UNIX para uma data ; Atenção: Note a estranha ordem dos argumentos, que diferem da ordem dos argumentos em um chamada regular da UNIX mktime() e que não combina bem com si mesma para a omissão dos parâmetros da direita para a esquerda (veja abaixo). é um erro comum misturar estes valores acima em um script. Retorna o timestamp Unix correspondente para os argumentos dados. Este timestamp é um longo inteiro contendo o número de segundos entre a Era Unix (January 1 1970) e o tempo especificado. Argumentos podem ser omitidos da direita para esquerda; quaisquer argumentos assim omitidos serão definidos para o valor atual de acordo com a data e a hora local. is_dst pode ser definido para 1 se está durante o horário de verão, 0 se não estiver, ou -1 (o padrão) se não se sabe se está em horário de verão ou não. Se é desconhecido, o PHP tenta calcular. Isto pode causar resultados inesperados (mas não incorretos). Nota: is_dst adicionado no 3.0.10. mktime() é útil para fazer data aritimética e validação, ela calculará automaticamente o valor correto para um receptor fora de linha. Por exemplo, cada uma das seguintes linhas produz a string "Jan-01-1998". Strtotime = Analisa qualquer descrição em texto em inglês de data hora em timestamp UNIX ; Sintaxe = int strtotime ( string time [, int now]) Exemplo : echo strtotime ("now"), "\n"; echo strtotime ("10 September 2000"), "\n"; echo strtotime ("+1 day"), "\n"; echo strtotime ("+1 week"), "\n"; echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n"; echo strtotime ("next Thursday"), "\n"; echo strtotime ("last Monday"), "\n"; Funções de Manipulação de Strings CHR = Retorna um caracter específico. Retorna uma string de um único caractere contendo o caracter especificado pelo ascii. Sintaxe = string chr ( valor ascII ) Exemplo <?php //retornando o alfabeto em letras minusculas for($i=97;$i<123;$i++) { echo chr($i).”($i)”.($i<122 ? “,”:””); } ?> COUN T_CHARS = retorna algumas informações sobre os caracteres existentes na string informada. Sintaxe = array/string count_chars(valor,modo) Dependendo do modo informado, será retornado um array(modos 0,1 e2) ou uma string(modos 3 e 4). Os possíveis valores para o modo e o resultado obtido da função são os seguintes : 1 – modo padrão, retorna um array numerado de 0 a 255 com o número de repetições para cada byte correspondente na string informada. 2 – O mesmo que zero, mas retorna somente se o número de repetições for maior que zero. 3 – O mesmo que zero, mas retorna somente se o numero de repetições for igual zero. 4 – Uma string contendo uma lista de todos os caracteres presentes na string. 5 – Uma string contendo uma lista de todos os caracteres ausentes na string. Exemplo : <?php $valor = “PHP 5 – Guia do Programador, Editora Érica – 2004”; $s1=count_chars($valor,1); $s2=count_chars($valor,3); echo”<pre>”; print_r($s1); echo $s2; echo “</pre>”; ?> OBS : Print_r faz com que o php imprima na tela um array num formato intelegível EXPLODE = retorna um array contendo cada elemento de uma parte da string informada. Cada parte será determinada conforme o separador informado. Sintaxe = array explode(separator,string,limite) O último parâmetro, limite, é opcional e se informado, indica à função o número máximo de elementos do array(neste caso o último elemento do array conterá o restante da string). <?php $string=“Este é um exemplo da função explode no PHP”; $v1=explode(“ “,$string); $v2=explode(“ “,$string,3); echo”<pre>”; print_r($v1); print_r($v2); echo “</pre>”; ?> IMPLODE = faz o inverso do EXPLODE, retorna uma string representando todos os elementos do array informado e separando os elementos com o separador informado. Sintaxe = string implode(separador,array) Exemplo : <?php $arr = array(“PHP5”,”Guia do Programador”); echo implode(“ “,$arr); ?> Str_replace/str_ireplace = executam a busca e a substituição de um texto por outro dentro de uma string informada. A diferença é que str_replace é case sensitive e a outra não. A sintaxe para ambas é a mesma. Sintaxe = string str_replace(texto_src,texto_rep,texto_princ, cont) Onde texto_src é o texto que deve ser procurado em texto_princ,text_rep é que irá substituir todas as ocorrências de text_src em texto_princ, e cont é opcional e se for informada receberá o número de trocas efetuadas. Exemplo : <?php $texto=“PHP5 – Guia Programador”; $vog=array(“a”,”e”,”i”,”o”,”u”); $s1=str_replace($vog,”-”,$texto,$cont); $s2=str_ireplace(“PHP”,”*”,”$texto”,$co nt2); echo “str_replace: $s1. Número de substituições: $cont <br>”; echo “str_ireplace: “ . $s2 . “ Número de substituições: $cont2<br>”; ?> STRLEN = fornece o tamanho da string informada. Sintaxe = integer strlen(texto) Exemplo : <?php $texto=“Paralelograma”; echo strlen($texto); ?> STRTOLOWER = a função strtolower transforma todos os caracteres da string informada em minúsculas. Sintaxe = string strtolower(texto) Exemplo : <?php $texto = “Teste de LETRAS”; echo strtolower($texto); ?> STRTOUPPER = ao inverso do strtolower, esta função retorna uma string com todos os caracteres em maiúsculos. Sintaxe = string strtoupper(texto) Exemplo : <?php $texto=“PHP TESTE”; echo strtoupper($texto); ?> SUBSTR = retorna um pedaço da string informada. Sintaxe = string substr(texto,posic_inicial,tamanho) OBS : a posição inicial de uma string no PHP é ZERO e não 1, tome cuidado. Exemplo : <?php $texto=“Texto inicial do PHP”; echo substr($texto,0,14); ?> Exemplo de funções para obter o IP e o BROWSER do visitante, veja o exemplo : <?php $ip = ($_SERVER['REMOTE_ADDR']); print (" Seu IP corrente é: $ip"); ?></br> <? $browser = ($_SERVER['HTTP_USER_AGENT'] ); print ("Você está usando $browser"); ?> Outras funções de IP Veja o exemplo ? $ip = $_SERVER['REMOTE_ADDR']; echo $ip; // 127.0.0.1 $host = gethostbyaddr($_SERVER['REMOT E_ADDR']); echo $host; // localhost $get_ip = gethostbyname('www.uol.com.br'); echo $get_ip; // 200.221.2.45 A primeira função, $_SERVER[’REMOTE_ADDR’], é utilizada para sabermos o endereço de IP de um usuário, por exemplo. A segunda, gethostbyaddr(), informa o nome do host name de Internet referente ao endereço de IP. A função gethostbyname() retorna o endereço de IP correspondente a um host name de internet Estruturas de Controle Especiais REQUIRE E INCLUDE - Têm por objetivo inserir pedaços de código PHP no script atual. A diferença básica entre eles está na maneira como tratam os erros., O INCLUDE produz apenas uma mensagem de aviso (warning) e o REQUIRE produz um erro fatal (fatal error), encerrando a execução do programa. Sintaxe = INCLUDE (nome arquivo) e REQUIRE(nome arquivo) Exemplo : <?php //variaveis.inc $meses=array(“jan”,”fev”,”mar”,”abr”, ”mai”,”jun”,”jul”,”ago”,”set”,”out”,”nov” ,”dez”); $dias=(“seg”,”ter”,”qua”,”qui”,”sex”,”s ab”,”dom”); ?> <?php //teste.php print_r($dias); include(“variaveis.inc”); print_r($dias); print_r($meses); ?> INCLUDE_ONDE e REQUIRE_ONCE Têm as mesmas funcionalidades do REQUIRE e do INCLUDE, só que com uma diferença fundamental. O PHP verifica se o arquivo que estamos tentando inserir já foi inserido anteriormente.Se já foi inserido, ele não será entrará no código novamente. Muito útil para códigos muito dinâmicos com muitas includes e requires, nem sempre sabemos quais aquivos já foram inseridos. DICA = Tanto o include_once e o require_once são case sensitive. Portanto, não importa o sistema operaciona, o php fará distinção entre maiúsculas e minúsculas nos nomes dos arquivos, cuidado. Comando RETURN Return pode ser utilizado dentro das funções em PHP ou dentro de um script ou ainda dentro de um arquivo incluído. Seu efeito é encerrar a função atual, o programa ou o processamento do arquivo inserido. <?php //arq1.inc Function dobro($valor) { return $valor * 2; } If ($vlr==0) { return -1; } Else { return dobro($vlr); } ?> <?php $vlr=10; $b = include(“arq1.inc”); echo $b; ?> Esse script tem como resultado 20. Formulários Exemplo de um código básico para um formulário : <form> <p>Digite seu E-Mail : <input type=“text”name=“email” size=“20”></p> <p><input type=“submit”value=“Enviar !”name=“enviar”></p> </form> Para se tornar esse formulário devemos informar para onde irá o formulário. Aí que entra o PHP. Fazemos isso com a opção action, utilizada na tag form do HTML. <form action=“recebeDados.php”> <p>Digite seu E-Mail : <input type=“text”name=“email” size=“20”></p> <p><input type=“submit”value=“Enviar !”name=“enviar”></p> </form> Agora sim, toda vez que este programa HTML rodar, suas informações serão processadas pelo programa PHP declarado. Falta agora criar o programa em PHP que fará isso. Observe também que temos a tag input no formulário, que pode assumir os seguintes valores : Name= nome do campo Value=valor padrão para o campo Size= tamanho do campo na tela Maxlenght=numero maximo de caracteres que podem ser digitados no campo Type=informa qual o tipo do campo de entrada de dados Também temos as possíveis opções para a cláusula type, dentro do input : Text=caixa de texto de uma linha, dados numéricos ou alfa. Password=para digitação de senhas, são mostrados *. Hidden=campo escondido, não aparece na tela. Utilizados para passar informações aos programas que recebem os dados. Select=lista de seleção Checkbox=caixa de seleção que pode ser marcada ou desmarcada. Radio=botões de seleção, o usuário escolhe uma entre várias. Textarea=caixa de texto com várias linhas File=permite o envio de arquivos Submit=botão que aciona o envio das informações do formulário Image=mesma função do submit, mas utiliza uma imagem ao invés do botão tradicional Reset=limpa todos os campos do formulário e os retorna ao valor padrão. Enviando as Informações Existem dois métodos para o envio de informações. GET e POST. Ambos são colocados na tag form com o comando method : <form action=“processa.php” method=“POST” GET é o método padrão, portanto se nenhum parâmetro for informado, o HTML assume como GET. Considere o formulário ? <form action=“recebeDados.PHP> <p>Digite seu Nome : <input type=“text” name=“nome” size=“30”></p> <p>Digite sua Idade : <input type=“text” name=“idade” size=“3”></p> <p><input type”submit” value=“Enviar !” name=“enviar”></p> </form> Note que não há o method, portanto será utilizado o GET. Ao preenchermos os camps e quando clicarmos no botão, o endereço ativado será o seguinte : http://www.seusite.com.br/recebeDados.php?nome=Jo aquim&idade=20 Os campos serão passados como parâmetros após o endereço de destino. O caractere ? Representa o início de uma cadeia de variáveis e o & o início de uma nova variável.As variáveis e seus valores são separadas por =. Em GET existe o inconveniente de se limitar o numero de caracteres a ser enviado, mais ou menos 2000. Outro problema é que o usuário enxergará os dados a serem enviados na barra de endereço do browser. Para isso existe o método POST. A vantagem é que o método GET, por passar os valores de parâmetros na barra de endereço, pode ser utilizado para enviar esses dados de uma página para outra. Já o POST não faz isso, só processa o formulário mesmo. Método POST <form action=“recebeDados.PHP method=“POST”> <p>Digite seu Nome : <input type=“text” name=“nome” size=“30”></p> <p>Digite sua Idade : <input type=“text” name=“idade” size=“3”></p> <p><input type”submit” value=“Enviar !” name=“enviar”></p> </form> Neste caso, utilizando o POST, os dados serão enviados ao servidor por meio do corpo da mensagem, Portanto, ao clicar em enviar, o usuário não verá aquele endereço enorme na barra de endereço, só verá o endereço do programa.php. Não há limitação de tamanho como no GET. Portanto, é recomendado se utilizar o POST para formulários com muitas informações. Além disso, no POST podemos enviar outros tipos de informações não aceitas no GET, como imagens ou outros arquivos. Tratando as Informações recebidas no PHP O programa php que tratará suas informações, agirá da seguinte forma : <?php $username=$_POST[“usernam e”]; $nome=$_POST[“nome”]; E assim por diante. Validação dos Campos Podemos testar os valores do formulário. Por exemplo, posso testar se algum campo que deve ser numérico veio com letras por exemplo, ou se um campo obrigatório está em branco. Posso ainda exigir um número mínimo de caracteres por exemplo, para um campo senha que seja obrigatório no mínimo 5 dígitos. Para isso testamos seus valores da seguinte forma, após termos atribuído seus valores nas respectivas variáveis : Strlen = retorna o numero de caracteres de uma string. Exemplo : if(strlen($username)<5) { echo “O numero minimo de caracteres é 5 !” Empty= verifica se a string está vazia ou nula. Exemplo ? if(empty($nome)) { echo “Favor preencher o campo nome !”; Strstr = verifica a primeira existencia em uma string. Exemplo : if strstr($email,”@”) Upload de Arquivos É relativamente fácil se incluir um upload de arquivos em nossa página. Basta antes de mais nada criar nosso formulário com o campo (INPUT TYPE=“FILE”>, não esquecendo de acrescentar no marcador FORM o elemento ENCTYPE=“multipart/form-data”, sem isso tudo o upload não funcionará. Programação O.O. em PHP No PHP já temos recursos como gerenciamento de exceções (try,catch), herança, definição de atributos e métodos públicos e privados, construtores, destruidores e reflexão de classes, possibilitando uma melhor estruturação nos sistemas. Classes – Definição e Criação Classe é uma abstração de um objeto, ou seja, é um modelo a partir do qual os objetos podem ser criados.Enquanto um objeto representa algo real em um instante, a classe é uma generalização deste. Tipo, um objeto funcionário, tem nome João, Idade 43. Já a classe é genérica para todos. Por exemplo, temos as características deste objeto, como nome, idade, endereço e etc. Percebe-se que estamos tratando esses dados para todos ! Para se criar uma classe no PHP devemos seguir a seguinte forma : Class nome_classe { atributos métodos } Este é um formato mínimo para criarmos uma classe em PHP : <?php class carro { private $_marca; private $_modelo; private $_cor; private $_ano; public function setMarca($_m) { $this ->_marca=$_m } public function setModelo($_mo) { $this->_modelo=$_mo; } public function setCor($_c) { $this->_cor=$_c; } public function setAno($_a) { $this->_ano=$_a; } public function getMarca() { return $this->_marca; } public function getModelo() { return $this->_modelo; } public function getCor() { return $this->_cor; } public function getAno() { return $this->_ano; } public function getCarro() { return “Marca: “.$this>getMarca().”<br/>”. “Modelo: “.$this->getModelo().”<br/>”. “Cor: “.$this->getCor().”<br/>”. “Ano: “.$this->getAno(); } } ?> Visibilidade de Atributos e Métodos Os métodos e atributos de uma classe em PHP podem ser definidos como private, public e protected. Public = um atributo ou método definido como publico torna-o acessível em qualquer lugar da classe, subclasse bem como em qualquer parte dos scripts que contêm a classe. Exemplo : <?php class carro { public $_modelo; public function setModelo($_m) { $this->_modelo=$_m; } } $_c=new carro(); $_c->setModelo(“FORD”); $_c-> _modelo=“CHEVROLET”; ?> Protected = atributos ou métodos definidos como protected são visíveis pela classe que os criou e por suas subclasses, fora deste contexto não estão acessíveis. <?php class carro{ protected $_modelo; public function setModelo($_m){ $this->_modelo=$_m; } } class caminhao extends carro{ protected $_eixos; public function setModelo($_m){ parent:::_modelo=$_m; } public function setEixo($_ne){ $this->_eixos=$_ne; } } $_c=new carro(); $_c->setModelo(“FORD”); $_c->_modelo=“CHEVROLET”; //gera um erro $_c= new caminhao(); $_c->setModelo(“SCANIA”); $_c->setEixo(8); var_dump($c); ?> Private = os atributos e métodos são visíveis apenas na classe que os criou, ou seja, subclasses ou o script que comtêm a classe não podem acessar esses atributos ou métodos. Exemplo : <?php class pessoas{ private $_tipo; protected $_nome; protected $_endereco; protected $_telefone; protected function setTipo($_t){ $_this->_tipo=$_t; } } class estudante extends pessoas{ protected $_curso; function _CONSTRUCTOR(){ parent::setTipo(“E”); } } $e=new estudante(); $e->_tipo=“A”;//erro ?> Funções Especiais – HTTP As funções HTTP servem para gerenciamento da conexão entre o PHP e o browser do usuário. As principais funções são : header, para o envio de um cabeçalho http, header_list para obter uma lista do cabeçalho e headers_sent para verificar se um cabeçalho foi enviado ou não. HEADER Esta função serve para enviar um ou vários cabeçalhos http. Sintaxe : header(cabeçalho,atualiza) O parâmetro atualiza indica se um cabeçalho anterior do mesmo tipo deve ser atualizado(true) ou se deve ser inserida uma nova linha com o mesmo tipo de cabeçalho(false). Existem dois cabeçalhos especiais : o primeiro é o cabeçalho do tipo HTTP/ o qual indica que um código de retorno está sendo enviado(por exemplo página não encontrada). Exemplo : <?php header(HTTP/1.0 404 Página não encontrada”); exit; ?> O segundo tipo é o cabeçalho “Location”, que executa um redirecionamento no browser (o browser busca o endereço informado no cabeçalho). Exemplo : <?php header(“Location:http://www.php.net”); exit; ?> IMPORTANTE : Os cabeçalhos HTTP devem ser enviados antes de qualquer outra tag HTML. HEADERS_LIST Esta função retorna um array com todos os cabeçalhos enviados ao browser pelo script atual. Sintaxe : array headers_list() Exemplo : <?php header(“Expires:Mon, 20 May 2007 05:00:00 GMT”); header(“Last-Modified:” . Gmdate(“D, d M Y H:i:s”) . “ GMT”); header(“Cache-Control:no-store, no-cache, mustrevalidate”); header(“Cache-Control:post-check=0, pre-check=0”, false); header(“Pragma: no-cahce”); header(“Content-Type:text/HTML”); setcookie(“nome”,”Glaucio”); var_dump((headers_list());//exibe atributos do array ?> HEADERS_SENT Verifica se um cabeçalho já foi enviado ao browser, retornando verdadeiro (true) caso um cabeçalho já tenha sido enviado e falso(false) caso contrário. Muito útil para controlarmos o envio de cookies e outras informações ao browser. Sintaxe : bool headers_sent(&arquivo,&linha) Os parâmetros opcionais arquivo e linha receberão, se informados, o nome do programa e a linha na qual o envio de informações para o browser foi iniciado. Exemplo : <?php function server_url() { $proto=“http”.((isset($_SERVER[‘HTTPS’])&&$server[‘HTTPS’]==“on’)?”s”: ””).”://”; $server=isset($_SERVER[‘HTTP_HOST’]) ? $_SERVER[‘HTTP_HOST’] : $_SERVER[‘SERVER_NAME’]; return $proto.$server; } function redir($_url) { $url=server_url().dirname($_SERVER[‘PHP_SELF´]).”/”.$_url; if (!headers_sent()) { header(“Location: $url”); } else { echo “<meta http-equiv=‘refresh’ content=‘0;url=$url’>”; } } ?> COOKIES E SESSÕES Cookies são arquivos texto que podem ser armazenados no computador do usuário para serem recuperados posteriormente pelo servidor no qual seu site está hospedado. Sessões são recursos que podemos utilizar para manter uma conexão com o usuário, enquanto ele estiver navegando no site. Utilidades em se utilizar cookies e sessões : Autenticação de Usuários : criação de um sistema envolvendo login, autenticação e logout, garantindo acesso ao site somente a usuários autorizados. Carrinho de compras : utilizado para guardar as compras do cliente enquanto ele navega pelo site. Exibição de anúncios ou imagens : mantêm informações sobre quais anúncios ou mensagens já foram mostradas para aquele usuário. Personalização de páginas : exemplo de uma livraria que poderia mostrar anúncio de livros de informática a um usuário que da última vez comprou livros de informática Utilizando Cookies O PHP nos fornece a função setcookie que envia cookies para o computador do usuário. Esta função é utilizada tanto para se criar um cookie quanto para excluí-lo. Sintaxe : bool setcookie(string nome[,string valor[,int validade[,string caminho[,string dominio[,int seguro]]]]]) onde : nome=nome do cookie que está sendo enviado, é o único parametro obrigatorio na função. Valor=é o valor do cookie, se não fornecido, o comando exclui o cookie se este existir. Validade=define o tempo de validade do cookie. Caminho=caminho no servidor para o qual o cookie estará disponível Dominio=domínio para o qual o cookie estará disponível seguro=valor inteiro(0 ou 1) que indica se o cookie é seguro.Se for utilizado 1, o cookie será transmitido se a conexão for segura (HTTPS) OBS : se for criado um cookie somente com o nome, a função setcookie excluirá o cookie. Portanto, sempre crie um cookie com pelo menos nome e valor. Exemplo : setcookie(“nome”,”Joao”); Se quiser excluir o cookie anterior, o comando ficaria : Setcookie(“nome”) Para criar um cookie valido por dois dias, utilizamos a função time : Setcookie(“nome”,”Joao”,time()+172800);//a função time obtem o tempo atual e somamos 172.800 segundos, que equivalem a 48 horas. IMPORTANTE : a criação de cookies deve ser feita antes de qualquer comando HTML, até mesmo antes do <HTML> e <BODY>. Para se recuperar esse cookie gravado na máquina do cliente, devemos utilizar o array superglobal $_COOKIE.. Você só poderá recuperar seu cookie na próxima requisição de página feita pelo cliente. Porque na primeira requisição você criou o cookie, certo ? Resumindo : para criar setcookie(“nome”,”joao”) e para recuperar este cookie $_COOKIE(“nome”); Sessões Já vimos que sessão é o período de tempo que o usuário navega pelas páginas de um site. Serve para que registremos variáveis no servidor e poderão ser acessadas em qualquer página do site. ENQUANTO A SESSÃO ESTIVER ABERTA. Cada sessão tem um número de identificador único, chamado de session id. Para uma página ter acesso aos dados da sessão ela deve conhecer esse identificador. Para se transmitir o identificador da sessão entre as páginas existem duas formas : cookies e propagação de variáveis na URL(endereço destino) O primeiro consiste em armazenar o id em um cookie na máquina do usuário e utilizá-lo como referência. É o melhor método, mas se o usuário bloquear o recebimento de cookies devemos usar o segundo método. No segundo método propagamos o id pela url. Acrescentamos ao final da url a constante SID, que o PHP cria automaticamente no início de uma sessão. Exemplo : Echo ‘<a ref=“pagina.php?’.SID.’”>Clique aqui</a>’; O melhor e mais seguro método é por cookies. Para se criar uma sessão no PHP existem duas maneiras, manual e automática. Na manual se faz de forma explícita (função session_start) ou de forma implícita(ao se registrar uma variável com a função session_register). Na automática habilitamos a diretiva session.auto_start do arquivo php.ini. Assim, sempre que o usuário entrar em seu site será criada uma sessão. VARIÁVEIS DE AMBIENTE Embora utilizadas no PHP, essas variáveis são do ambiente do servidor WEB e não da linguagem PHP. Com elas podemos descobrir diversas informações, como o endereço de IP do visitante, de onde veio a requisição da página, qual o tipo de conteúdo solicitado e etc. Para se obter o valor das variáveis de ambiente utilizamos a função getenv do PHP. Sua sintaxe é a seguinte : Getenv(“nome_da_variavel”) ; Por exemplo, se quisermos saber qual foi o método de envio de dados utilizado, fazemos o seguinte : $metodo = getenv(“REQUEST_METHOD”); LISTA DE VARIÁVEIS DE AMBIENTE Já vimos que com o getenv nos retorna os valores de diversas variáveis de ambiente. Agora veremos uma lista com as principais variáveis de ambiente: SERVER_SOFTWARE=servidor e softwares utilizados, ex apache, PHP, etc. SERVER_NAME=nome do servidor ou endereço IP GATEWAY_INTERFACE=versão da especificação CGI que o servidor fornece. SERVER_PROTOCOL=Nome e versão do protocolo utilizado Ex HTTP/1.1 SERVER_PORT=numero da porta para a qual a requisição foi feita REQUEST_METHOD=o metodo de envio de dados tipo GET, POST PATH_INFO=Informação extra de caminho dada pelo cliente para acesso de alguns scripts. PATH_TRANSLATED=versão traduzida de PATH_INFO.Faz um mapeamento de virtual para físico. SCRIPT_NAME=caminho virtual para o script que está sendo executado.Usado por páginas que referenciam elas mesmas. QUERY_STRING=armazena tudo o que vem após o ? Em uma url chamada. REMOTE_HOST=nome do host de onde veio a requisição. REMOTE_ADDR=contem o endereço de ip do visitante que solicitou a página. AUTH_TYPE=metodo de autenticação(usado por servidores que suportam autenticação de usuários) REMOTE_USER=nome do usuario(se o servidor suportar autenticação) REMOTE_IDENT=se o servidor suporta identificação padrão RFC 931, esta variável conterá nome do utilizador remoto que faz a requisição. CONTENT_TYPE=tipo MIME dos dados enviados, ex: “text/html” CONTENT_LENGHT= tamanho dos dados em bytes recebidos pelo servidor HTTP_ACCEPT=lista dos tipos MIME que o cliente pode aceitar. HTTP_USER_AGENT=nome e versão do browser utilizado pelo cliente. Certificados Digitais Um certificado digital é um arquivo de computador que contém um conjunto de informações referentes a entidade para o qual o certificado foi emitido (seja uma empresa, pessoa física ou computador) mais a chave pública referente a chave privada que acredita-se ser de posse unicamente da entidade especificada no certificado. A certificação digital atesta a identidade de uma pessoa ou instituição na internet por meio de um arquivo eletrônico assinado digitalmente. Seu objetivo é atribuir um nível maior de segurança nas transações eletrônicas, permitindo a identificação inequívoca das partes envolvidas, bem como a integridade e a confidencialidade dos documentos e dados da transação. A certificação digital oferece as seguintes garantias: Autenticidade do emissor e do receptor da transação ou do documento; Integridade dos dados contidos na transação ou no documento; Confidencialidade entre as partes; Não-repúdio das transações efetuadas ou documentos assinados. A Administração Pública Federal, por meio da MP 2.200-2/2001, instituiu a InfraEstrutura de Chaves Públicas (ICP-Brasil), estabelecendo padrões de certificação digital para os órgãos federais. As versões mais atualizadas dos navegadores já reconhecem automaticamente os certificados ICPBrasil. Obter uma assinatura digital não é algo tão simples. Primeiro é necessário procurar uma entidade que faça esse serviço, isto é, deve-se procurar uma Autoridade Certificadora (AC). Uma AC tem a função de verificar a identidade de um usuário e associar a ele uma chave. Essas informações são então inseridas no certificado digital. Para que um certificado seja válido, é necessário que o interessado tenha a chave pública da AC para comprovar que aquele certificado foi, de fato, emitido por ela. A questão é que existem inúmeras ACs espalhadas pelo mundo e fica, portanto, inviável ter a chave pública de cada uma. A solução encontrada para esse problema foi a criação de "ACs supremas" (ou "ACs-Raiz"), ou seja, instituições que autorizam as operações das ACs que emitem certificados a pessoas e empresas. Esse esquema é conhecido como ICP (Infra-estrutura de Chaves Públicas) ou, em inglês, PKI (Public Key Infrastructure). No Brasil, a ICP-Brasil controla as ACs: Presidência da República, Receita Federal, SERPRO, Caixa Econômica Federal, Serasa e CertiSign. Isso significa que, para que tenha valor legal diante do governo brasileiro, uma dessas instituições deve prover o certificado. Porém, para que isso seja feito, cada instituição pode ter requisitos e custos diferentes para a emissão, uma vez que cada entidade pode emitir certificados para finalidades distintas. E isso se aplica a qualquer AC no mundo. No entanto, qualquer instituição pode criar uma ICP, independente de seu porte. Por exemplo, se uma empresa criou uma política de uso de certificados digitais para a troca de informações entre a matriz e sua filiais, não vai ser necessário pedir tais certificados a uma AC controlada pela ICP-Brasil. A própria empresa pode criar sua ICP e fazer com que um departamento das filiais atue como AC ou AR, solicitando ou emitindo certificados para seus funcionários. FIM Professor Glaucio Bianchini UNIBAN maio/2008