Beruflich Dokumente
Kultur Dokumente
Por: Adriano de Oliveira Gonalves 10/2004 Baseado no trabalho original de Mauricio Vivas - mauricio@cipsga.org.br Curso de Aplicaes Web em PHP - www.cipsga.org.br, Junho/2000
ndice
ndice............................................................................................................................... 2 Apresentao e Objetivos............................................................................................. 7 1 - Introduo................................................................................................................. 8 1.1 - Client-side / Server-side scripts............................................................................... 8 1.1.1 Client-side scripts............................................................................................. 8 1.1.2 Server-side Scripts........................................................................................... 9 1.2 O que PHP?....................................................................................................... 10 1.3 O que pode ser feito com o PHP?........................................................................ 10 1.4 Como surgiu a linguagem PHP?........................................................................... 10 2 - Enviando Dados para o Servidor HTTP................................................................ 12 2.1 O Mtodo GET...................................................................................................... 12 2.2 Headers................................................................................................................. 13 2.3 O Mtodo POST................................................................................................... 13 2.4 Utilizando GET e POST........................................................................................ 13 3 Formulrios HTML................................................................................................. 14 3.1 Definindo um formulrio........................................................................................ 14 3.2 A tag INPUT.......................................................................................................... 14 3.3 - Campo de Texto.................................................................................................... 14 3.4 - Campo de Texto com Mscara.............................................................................. 15 3.5 - Checkbox............................................................................................................... 15 3.6 - Radio Button.......................................................................................................... 15 3.7 - Submit Button........................................................................................................ 15 3.8 - Reset Button.......................................................................................................... 15 3.9 - Button.................................................................................................................... 16 3.10 - TextArea.............................................................................................................. 16 3.11 - Select................................................................................................................... 16 3.12 - Upload de arquivos.............................................................................................. 17 4 Instalao e configurao..................................................................................... 18 4.1 - Instalao e configurao em ambiente Windows................................................ 18 4.1.1 - Servidor Apache............................................................................................. 18 4.1.2 - PHP................................................................................................................ 18 4.1.3 - MySQL............................................................................................................ 18 4.2 - Instalao e configurao em ambiente Linux...................................................... 19 4.2.1 - Preparando o Apache para Instalao........................................................... 19 4.2.2 - Instalando o PHP............................................................................................ 19 4.2.3 - Instalando o Apache....................................................................................... 19 4.2.3 - Instalando o MySQL....................................................................................... 19 5 Sintaxe Bsica........................................................................................................ 21 5.1 Delimitando o cdigo PHP.................................................................................... 21 5.2 - Separador de instrues........................................................................................ 21 5.3 - Nomes de variveis............................................................................................... 21 5.4 - Comentrios........................................................................................................... 21 5.4.1 - Comentrios de uma linha:............................................................................. 21 5.4.2 - Comentrios de mais de uma linha:.............................................................. 22 5.5 - Imprimindo cdigo html.......................................................................................... 22 6 - Tipos........................................................................................................................ 23 6.1 - Tipos Suportados................................................................................................... 23 6.1.1 - Inteiros (integer ou long)................................................................................. 23
Desenvolvimento PHP - ndice - Pgina 2 de 79
6.1.2 - Nmeros em Ponto Flutuante (double ou float).............................................. 23 6.1.3 - Strings............................................................................................................. 23 6.1.4 - Arrays............................................................................................................. 24 6.1.5 - Listas.............................................................................................................. 25 6.1.6 - Objetos........................................................................................................... 25 6.1.7 - Booleanos....................................................................................................... 26 6.2 - Transformao de tipos......................................................................................... 26 6.2.1 - Coeres........................................................................................................ 26 6.2.2 - Transformao explcita de tipos.................................................................... 26 6.2.3 - Com a funo settype..................................................................................... 27 7 - Operadores.............................................................................................................. 28 7.1 - Aritmticos............................................................................................................. 28 7.2 - de strings............................................................................................................... 28 7.3 - de atribuio.......................................................................................................... 28 7.4 - bit a bit................................................................................................................... 28 7.5 - Lgicos................................................................................................................... 29 7.6 - Comparao.......................................................................................................... 29 7.7 - Expresso condicional........................................................................................... 29 7.8 - de incremento e decremento................................................................................. 29 8 - Estruturas de Controle........................................................................................... 30 8.1 - Blocos.................................................................................................................... 30 8.2 - Comandos de seleo........................................................................................... 30 8.2.1 - if...................................................................................................................... 30 8.2.2 - switch.............................................................................................................. 32 8.3 - comandos de repetio......................................................................................... 33 8.3.1 - while................................................................................................................ 33 8.3.2 - do... while........................................................................................................ 34 8.3.3 - for................................................................................................................... 34 8.4 - Quebra de fluxo..................................................................................................... 35 8.4.1 - Break.............................................................................................................. 35 8.4.2 - Continue......................................................................................................... 35 9 - Funes................................................................................................................... 36 9.1 - Definindo funes.................................................................................................. 36 9.2 - Valor de retorno..................................................................................................... 36 9.3 - Argumentos............................................................................................................ 36 9.3.1 - Passagem de parmetros por referncia....................................................... 37 9.3.2 - Argumentos com valores pr-definidos (default)............................................ 37 9.4 - Contexto................................................................................................................. 38 9.5 - Escopo................................................................................................................... 38 10 - Variveis e Constantes......................................................................................... 40 10.1 - Declarao de uma varivel................................................................................ 40 10.2 - O modificador static............................................................................................. 40 10.3 - Variveis Variveis.............................................................................................. 41 10.4 - Variveis enviadas pelo navegador..................................................................... 41 10.4.1 - URLencode................................................................................................... 41 10.4.2 - Utilizando arrays........................................................................................... 41 10.5 - Variveis de ambiente......................................................................................... 42 10.6 - Verificando o tipo de uma varivel....................................................................... 42 10.6.1 - Funo que retorna o tipo da varivel.......................................................... 42 10.6.2 - Funes que testam o tipo da varivel......................................................... 43 10.7 - Destruindo uma varivel...................................................................................... 43
Desenvolvimento PHP - ndice - Pgina 3 de 79
10.8 - Verificando se uma varivel possui um valor....................................................... 43 10.8.1 - A funo isset............................................................................................... 43 10.8.2 - A funo empty............................................................................................. 43 10.9 - Constantes pr-definidas..................................................................................... 43 10.10 - Definindo constantes......................................................................................... 43 11. Classes e Objetos.................................................................................................. 44 11.1 - Classe.................................................................................................................. 44 11.2 - Objeto.................................................................................................................. 44 11.3 - A varivel $this..................................................................................................... 44 11.4 - SubClasses.......................................................................................................... 45 11.5 - Construtores........................................................................................................ 45 12 - Noes de SQL..................................................................................................... 46 12.1 - Introduo............................................................................................................ 46 12.2 - Estrutura das tabelas........................................................................................... 46 12.2.1 - Comando Create.......................................................................................... 46 12.2.2 - Comando Drop............................................................................................. 47 12.2.3 - Comando Alter.............................................................................................. 47 12.3 - Manipulando dados das tabelas.......................................................................... 47 12.3.1 - Comando SELECT....................................................................................... 47 12.3.2 - Comando INSERT........................................................................................ 47 12.3.3 - Comando UPDATE...................................................................................... 48 12.3.4 - Comando DELETE....................................................................................... 48 13 - Acessando o MySQL via PHP.............................................................................. 49 13.1 - Estabelecendo conexes..................................................................................... 49 13.2 - Selecionando a base de dados........................................................................... 49 13.3 - Realizando consultas........................................................................................... 49 13.3.1 - Apagando o resultado.................................................................................. 50 13.3.2 - Nmero de linhas......................................................................................... 50 13.3.3 - Utilizando os resultados................................................................................ 50 13.3.4 - Alterando o ponteiro de um resultado.......................................................... 50 14 - Acessando o PostgreSQL via PHP...................................................................... 51 14.1 - Estabelecendo conexes..................................................................................... 51 14.3 - Realizando consultas........................................................................................... 51 14.3.1 - Verificando o erro na execuo de uma query............................................. 52 14.3.2 - Apagando o resultado.................................................................................. 52 14.3.3 - Nmero de linhas......................................................................................... 52 14.3.4 - Utilizando os resultados................................................................................ 52 15 - Utilizando headers................................................................................................ 53 16. Cookies e Sesses................................................................................................. 54 16.1 - O que so............................................................................................................ 54 16.2 Cookies............................................................................................................... 54 16.2.1 - Gravando cookies......................................................................................... 54 16.2.2 - Lendo cookies gravados............................................................................... 54 16.3 Sesses.............................................................................................................. 55 17 - Manipulando arquivos.......................................................................................... 56 17.1 - Copiando Arquivos............................................................................................... 56 17.2 - Verificando o tamanho de um arquivo................................................................. 56 17.3 - Verificando se um arquivo existe......................................................................... 56 17.4 - Limpando o cache............................................................................................... 56 17.5 - Abrindo arquivos para leitura e/ou escrita........................................................... 56 17.6 - Lendo de um arquivo........................................................................................... 57
Desenvolvimento PHP - ndice - Pgina 4 de 79
17.6 - Escrevendo em um arquivo................................................................................. 58 Exemplo......................................................................................................................... 58 17.7 - Uploads com formulrios HTML.......................................................................... 58 18 - Enviando e-mail.................................................................................................... 60 20 Links e boas fontes de pesquisa........................................................................ 61 21 Bibliografia e Referncias................................................................................... 62 APNDICE 01 - Funes para tratamento de strings............................................... 63 Funes relacionadas a HTML...................................................................................... 63 htmlspecialchars........................................................................................................ 63 htmlentities................................................................................................................. 63 nl2br........................................................................................................................... 63 get_meta_tags........................................................................................................... 63 strip_tags................................................................................................................... 64 urlencode................................................................................................................... 64 urldecode................................................................................................................... 64 Funes relacionadas a arrays...................................................................................... 64 Implode e join............................................................................................................ 64 split............................................................................................................................. 65 explode...................................................................................................................... 65 Comparaes entre strings............................................................................................ 65 similar_text................................................................................................................. 65 strcasecmp................................................................................................................. 65 strcmp........................................................................................................................ 65 strstr........................................................................................................................... 66 stristr.......................................................................................................................... 66 strpos......................................................................................................................... 66 strrpos........................................................................................................................ 66 Funes para edio de strings..................................................................................... 66 chop........................................................................................................................... 66 ltrim............................................................................................................................ 66 trim............................................................................................................................. 67 strrev.......................................................................................................................... 67 strtolower................................................................................................................... 67 strtoupper................................................................................................................... 67 ucfirst......................................................................................................................... 67 ucwords...................................................................................................................... 67 str_replace................................................................................................................. 68 Funes diversas........................................................................................................... 68 chr.............................................................................................................................. 68 ord ............................................................................................................................. 68 echo .......................................................................................................................... 68 print ........................................................................................................................... 68 strlen ......................................................................................................................... 68 APNDICE 02 - Funes para tratamento de arrays................................................. 69 Funes Genricas........................................................................................................ 69 Array.......................................................................................................................... 69 range.......................................................................................................................... 69 shuffle........................................................................................................................ 69 sizeof.......................................................................................................................... 70 Funes de navegao............................................................................................... 70 reset........................................................................................................................... 70
Desenvolvimento PHP - ndice - Pgina 5 de 79
end............................................................................................................................. next............................................................................................................................ prev............................................................................................................................ pos............................................................................................................................. key............................................................................................................................. each........................................................................................................................... Funes de ordenao.................................................................................................. sort............................................................................................................................. rsort............................................................................................................................ asort........................................................................................................................... arsort.......................................................................................................................... ksort........................................................................................................................... usort........................................................................................................................... uasort......................................................................................................................... uksort......................................................................................................................... GNU Free Documentation License.............................................................................
70 70 70 70 70 70 71 71 71 71 71 71 72 72 72 73
Baseado no trabalho original de Mauricio Vivas - mauricio@cipsga.org.br Curso de Aplicaes Web em PHP - www.cipsga.org.br, Junho/2000
Copyright (c) 2004, Adriano de Oliveira Gonalves. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
Copyright (c) 2004, Adriano de Oliveira Gonalves E garantida a permisso para copiar, distribuir e/ou modificar este documento sob os termos da GNU Free Documentation License, verso 1.1 ou qualquer outra verso posterior publicada pela Free Software Foundation; sem obrigatoriedade de Sees Invariantes na abertura e ao final dos textos. Uma copia da licena deve ser includa na seo intitulada GNU Free Documentation License.
Apresentao e Objetivos
Seja bem-vindo, querido leitor! Essa apostila foi originalmente montada para um curso de treinamento que estive desenvolvendo, mas gostaria de compartilhar com vocs o que tem chegado ao meu alcance. Esse trabalho foi baseado no trabalho de Mauricio Vivas (mauricio@cipsga.org.br): Aplicaes Web em PHP - Comit de Incentivo a Produo do Software Gratuito e Alternativo - www.cipsga.org.br - e que me ajudou a dar os meus primeiros passos com PHP. Eu creio que vocs tero grandes chances de aprender com esse material. O objetivo dessa apostila capacitar voc para o desenvolvimento de Sites dinmicos e interativos com o uso do PHP, abrangendo as noes bsicas de programao, integrao com HTML e o gerenciamento de sesses e cookies. Qualquer dvida a mais, voc pode me enviar um e-mail que eu terei o maior prazer de, dentro do possvel, te ajudar. Que Deus ilumine a sua mente e seu aprendizado! Com carinho de desenvolvedor e corao de cristo, Adriano de Oliveira Gonalves Web developer adriano@ison.com.br
1 - Introduo
1.1 - Client-side / Server-side scripts
O conceito de aplicao client-side / server-side um dos mais importantes no desenvolvimento de aplicaes web. primordial que ele esteja bem compreendido e fixado, pois, uma vez entendido d abertura para o entendimento de todo o restante.
Ele combinou os scripts do pacote Personal Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que cresceu bastante, e as pessoas passaram a contribuir com o projeto. Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo, e em meados de 1997 esse nmero subiu para mais de 50.000. Nessa poca houve uma mudana no desenvolvimento do PHP. Ele deixou de ser um projeto de Rasmus com contribuies de outras pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a verso 3. O lanamento do PHP4, ocorrido em 22/05/2000, trouxe muitas novidades aos programadores de PHP. Uma das principais foi o suporte a sesses, bastante til pra identificar o cliente que solicitou determinada informao. Alm das mudanas referentes a sintaxe e novos recursos de programao, o PHP4 trouxe como novidade um otimizador chamado Zend, que permite a execuo muito mais rpida de scripts PHP. Hoje temos nossa disposio o PHP 5, que trouxe uma srie de inovaes, porm ainda no se encontra disponvel em boa parte dos provedores.
dinamicamente, este mtodo tem pelo menos dois problemas que em determinadas circunstncias podem ser considerados srios: O primeiro que o GET permite uma quantidade de dados passados limitada a 1024 caracteres, o que pode gerar perda de informaes em certos casos. O segundo que pelo fato de que as informaes fazem parte da URL, todos os dados podem ser vistos pelo usurio. Isso pode ser extremamente perigoso quando informaes sigilosas esto envolvidas (senha, por exemplo).
2.2 Headers
A verso 1.0 do protocolo HTTP trouxe boas inovaes ao mesmo. Uma delas foi a criao de headers nas mensagens de requisio e de resposta. Os headers so informaes trocadas entre o navegador e o servidor de maneira transparente ao usurio, e podem conter dados sobre o tipo e a verso do navegador, a pgina de onde partiu a requisio (link), os tipos de arquivos aceitos como resposta, e uma srie de outras informaes. Assim foi possvel definir um outro mtodo de requisio de arquivos, que resolveu os principais problemas do mtodo GET.
3 Formulrios HTML
3.1 Definindo um formulrio
Por ser uma linguagem de marcao, a sintaxe do HTML na maioria dos casos exige uma tag de incio e uma de final daquele bloco. Exatamente isso que ocorre com a definio de um formulrio: uma tag no incio e outra no final, sendo que todos os elementos do formulrio devem estar entre as duas tags. Isto torna possvel a incluso de mais de um formulrio num mesmo html. As tags citadas so:
name: o identificador do formulrio. Utilizado principalmente em Scripts client-side (JavaScript); action: nome do script que receber os dados do formulrio ao ser submetido. Mais frente esto abordadas as maneiras de tratar esses dados recebidos; method: mtodo de envio dos dados: get ou post; enctype: formato em que os dados sero enviados. O default urlencoded. Se for utilizado um elemento do tipo upload de arquivo (file) preciso utilizar o tipo multipart/form-data.
Exemplo:
3.5 - Checkbox
<input type="checkbox" name="" value="" checked>
Utilizado para campos de mltipla escolha, onde o usurio pode marcar mais de uma opo. Parmetros: Value - o valor que ser enviado ao servidor quando o formulrio for submetido, no caso do campo estar marcado Checked - O estado inicial do elemento. Quando presente, o elemento j aparece marcado;
3.9 - Button
<input type="button" name="" value="">
Utilizado normalmente para ativar funes de scripts client-side (JavaScript, por exemplo). Sem essa utilizao, no produz efeito algum. Parmetros: Value o texto que aparecer no corpo do boto.
3.10 - TextArea
<textarea cols="" rows="" name="" wrap="">texto</textarea>
Exibe na tela uma caixa de texto, com o tamanho definido pelos parmetros cols e rows. Parmetros: Cols - nmero de colunas do campo, em caracteres; Rows - nmero de linhas do campo, em caracteres; Wrap - Maneira como so tratadas as quebras de linha automticas. O valor soft faz com que o texto quebre somente na tela, sendo enviado para o servidor o texto da maneira como foi digitado; O valor hard faz com que seja enviado para o servidor da maneira como o texto aparece na tela, com todas as quebras de linhas inseridas automaticamente; o valor off faz com que o texto no quebre na tela e nem quando enviado ao servidor. Value - O elemento do tipo textarea no possui o parmetro value. O valor pr-definido do campo o texto que fica entre as tags <textarea> e </textarea>.
3.11 - Select
<select name="" size="" multiple> <option value="">texto</option> </select>
Se o parmetro size tiver o valor 1 e no houver o parmetro multiple, exibe na tela uma combo box. Caso contrrio, exibe na tela uma select list Parmetros: Size - nmero de linhas exibidas. Default: 1; Multiple - parmetro que, se presente, permite que sejam selecionadas duas ou mais linhas, atravs das teclas Control ou Shift; option - Cada item do tipo option acrescenta uma linha ao select; lembrando que o <option> so tags que ficam dentro do SELECT, e so elas que tem o parmetro value; value - Valor a ser enviado ao servidor se aquele elemento for selecionado. Default: o texto do item; text - valor a ser exibido para aquele item. No definido por um parmetro, mas pelo texto que fica entre as tags <option> e </option>
4 Instalao e configurao
A instalao dos recursos bsicos necessrios para o desenvolvimento e execuo de aplicaes Web em PHP para ambiente Windows consideralvemente simples. Uma boa alternativa para se instalar no Windows se utilizar de algum pacote de instalao que instala tudo pra voc e depois configur-lo sua maneira. Uma excelente opo de pacote o Easy PHP (www.easyphp.org), que vem com o servidor web Apache, o MySQL como banco de dados e o PHP. Ainda assim, pode-se pegar cada componente separado nos seus sites e instal-los indivisualmente. Abaixo, um tutorial bsico de como fazer essas instalaes.
4.1.2 - PHP
Basta descompactar os arquivos para o diretrio "c:php3" e editar o arquivo de configurao. O arquivo "php3.ini-dist" deve ser copiado para o diretrio do windows (geralmente c:windows ou c:winnt) com o nome php3.ini. Depois de copiado, o arquivo pode ser editado, bastando modificar a linha extension_dir, que deve conter o diretrio onde esto os mdulos (c:php3). Veja o exemplo: extension_dir = c:php3 Alm disso necessrio descomentar a linha referente o mdulo mysql, j que iremos utiliz-lo basta tirar o ";" (ponto-e-vrgula) do incio da linha: ;extension=php3_mysql.dll Feito isso, podemos partir para a configurao do servidor Apache, necessria para que este reconhea o PHP. Editando novamente o arquivo httpd.conf, as linhas a seguir devem ser adicionadas no final do arquivo: ScriptAlias /php3/ "c:/php3/" AddType application/x-httpd-php3 .php3 .php Action application/x-httpd-php3 "/php3/php.exe" A primeira linha define o diretrio onde est o PHP. A segunda cria um "tipo" para o PHP, definido que todos os arquivos com as extenses ".php3" e ".php" devem passar pelo interpretador PHP. A terceira linha define o executvel do interpretador PHP. Depois de salvar o arquivo, podemos testar se a instalao do PHP foi bem sucedida. A melhor maneira criar um arquivo chamado teste.php3 e salvar no diretrio raiz do servidor Apache. O arquivo deve conter a seguinte informao:
<? phpinfo(); ?>
Acessando a pgina atravs do servidor (http://localhost/teste.php3), devemos ter como resultado uma listagem de todas as configuraes do PHP, incluindo o mdulo mysql, que foi definido como ativo no arquivo php3.ini.
4.1.3 - MySQL
O banco de dados mySQL pode ser conseguido em "http://www.mysql.com/download.html". Sua instalao tambm bastante simples, tambm no modelos de instalao de qualquer aplicativo para Windows.
4.2 - Instalao e configurao em ambiente Linux 4.2.1 - Preparando o Apache para Instalao
Aps fazer o download, voc dever descompactar o arquivo baixado e configurar o Apache. Execute os seguintes comandos:
$ cd /usr/src $ tar xvzf apache_1.3.x.tar.gz $ cd apache_1.3.x $ ./configure - -prefix=/www
Desta forma o Apache estar pronto para ser instalado, mas antes precisamos instalar o PHP para que o Apache o reconhea na biblioteca do PHP.
Voc pode incluir uma srie de outros parmetros, como por exemplo outros bancos de dados etc.
$ make $ make install $ cp php3.ini-dst /usr/local/lib/php3.ini
Depois de ter feito isso edite o arquivo httpd.conf ou o arquivo srm.conf, que se encontram no diretrio conf do Apache (/www/conf) e insira a seguinte linha:
AddType application/x-httpd-php3 .php
Isto indicar ao Apache que todas as pginas com formato ..php deve ser processadas pelo mdulo PHP
3. Configure o MySQL
./configure - -prefix=/usr/local/mysql
4. Compile o MySQL
make
5. Instale o MySQL
make
Acrescente a linha:
/usr/local/mysql/lib/mysql no fim deste arquivo
5 Sintaxe Bsica
5.1 Delimitando o cdigo PHP
O cdigo PHP fica embutido no prprio HTML. O interpretador identifica quando um cdigo PHP pelas seguintes tags:
<?php comandos ?> <script language=php> comandos </script> <? comandos ?> <% comandos %>
O tipo de tags mais utilizado o terceiro, que consiste em uma abreviao do primeiro. Para utiliz-lo, necessrio habilitar a opo short-tags na configurao do PHP. O ltimo tipo serve para facilitar o uso por programadores acostumados sintaxe de ASP. Para utiliz-lo tambm necessrio habilit-lo no PHP, atravs do arquivo de configurao php.ini.
5.4 - Comentrios
H dois tipos de comentrios em cdigo PHP:
Exemplo: <? echo teste; #isto um teste ?> <? echo teste; //este teste similar ao anterior ?>
Desenvolvimento PHP - 5 Sintaxe Bsica - Pgina 22 de 79
Exemplos: <? echo teste; /* Isto um comentrio com mais de uma linha, mas no funciona corretamente ?> */ <? echo teste; /* Isto um comentrio com mais de uma linha que funciona corretamente */ ?>
6 - Tipos
6.1 - Tipos Suportados
PHP suporta os seguintes tipos de dados: 1. Inteiro 2. Ponto flutuante 3. String 4. Array 5. Objeto PHP utiliza checagem de tipos dinmica, ou seja, uma varivel pode conter valores de diferentes tipos em diferentes momentos da execuo do script. Por este motivo no necessrio declarar o tipo de uma varivel para us-la. O interpretador PHP decidir qual o tipo daquela varivel, verificando o contedo em tempo de execuo. Ainda assim, permitido converter os valores de um tipo para outro desejado, utilizando o typecasting ou a funo settype (ver adiante).
# inteiro positivo na base decimal # inteiro negativo na base decimal # inteiro na base octal-simbolizado pelo 0 # equivale a 156 decimal
# equivale a 230.000
6.1.3 - Strings
Strings podem ser atribudas de duas maneiras: 1. utilizando aspas simples ( ' ) Desta maneira, o valor da varivel ser exatamente o texto contido entre as aspas (com exceo de \\ e \' ver tabela abaixo) 2. utilizando aspas duplas ( " ) Desta maneira, qualquer varivel ou caracter de escape ser expandido antes de ser atribudo.
Exemplo:
<? $teste = "Mauricio"; $vivas = '---$teste--\n'; echo "$vivas"; ?> A sada desse script ser "---$teste--\n". <? $teste = "Mauricio"; $vivas = "---$teste---\n"; echo "$vivas"; ?>
A sada desse script ser "---Mauricio--" (com uma quebra de linha no final). A tabela seguinte lista os caracteres de escape: Sintaxe \n \r \n) \t \\ \$ \ \ Tabulao horizontal A prpria barra ( \ ) O smbolo $ Aspa simples Aspa dupla Significado Nova linha Retorno de carro (semelhante a
6.1.4 - Arrays
Arrays em PHP podem ser observados como mapeamentos ou como vetores indexados. Mais precisamente, um valor do tipo array um dicionrio onde os ndices so as chaves de acesso. Vale ressaltar que os ndices podem ser valores de qualquer tipo e no somente inteiros. Inclusive, se os ndices forem todos inteiros, estes no precisam formar um intervalo contnuo. Como a checagem de tipos em PHP dinmica, valores de tipos diferentes podem ser usados como ndices de array, assim como os valores mapeados tambm podem ser de diversos tipos.
Exemplo: <? $cor[1] = vermelho; $cor[2] = verde; $cor[3] = azul; $cor[teste] = 1; ?> Equivalentemente, pode-se escrever: <? $cor = array(1 => vermelho, 2 => verde, 3 => azul, teste => 1); ?>
Desenvolvimento PHP - 6 - Tipos - Pgina 25 de 79
6.1.5 - Listas
As listas so utilizadas em PHP para realizar atribuies mltiplas. Atravs de listas possvel atribuir valores que esto num array para variveis. Vejamos o exemplo:
6.1.6 - Objetos
Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe para uma varivel.
Exemplo: class teste { function nada() { echo nada; } } $vivas = new teste; $vivas -> nada();
6.1.7 - Booleanos
Para especificar um literal booleano, use as palavras chave TRUE ou FALSE. Ambas so insensitivas ao caso.
6.2.1 - Coeres
Quando ocorrem determinadas operaes (+, por exemplo) entre dois valores de tipos diferentes, o PHP converte o valor de um deles automaticamente (coero). interessante notar que se o operando for uma varivel, seu valor no ser alterado. O tipo para o qual os valores dos operandos sero convertidos determinado da seguinte forma: Se um dos operandos for float, o outro ser convertido para float, seno, se um deles for integer, o outro ser convertido para integer.
// $vivas a string 1 // $vivas o integer 2 // $vivas o double 5.7 // $vivas o double 2.5
Como podemos notar, o PHP converte string para integer ou double mantendo o valor. O sistema utilizado pelo PHP para converter de strings para nmeros o seguinte: A. analisado o incio da string. Se contiver um nmero, ele ser avaliado. Seno, o valor ser 0 (zero); B. O nmero pode conter um sinal no incio (+ ou -); C. Se a string contiver um ponto em sua parte numrica a ser analisada, ele ser considerado, e o valor obtido ser double; D. Se a string contiver um e ou E em sua parte numrica a ser analisada, o valor seguinte ser considerado como expoente da base 10, e o valor obtido ser double;
+ + + + + +
// // // // // //
== == == == == ==
11.5 -1299 1 11 11 1
= = = =
// $vivas integer (15) // $vivas double (15.0) // $vivas double (3.9) // $vivas integer (3) // o valor decimal truncado
Desenvolvimento PHP - 6 - Tipos - Pgina 27 de 79
Os tipos de cast permitidos so: (int), (integer) muda para integer; (real), (double), (float) muda para float; (string) muda para string; (array) muda para array; (object) muda para objeto.
7 - Operadores
7.1 - Aritmticos
S podem ser utilizados quando os operandos so nmeros (integer ou float). Se forem de outro tipo, tero seus valores convertidos antes da realizao da operao. + * / % adio subtrao multiplicao diviso mdulo
7.2 - de strings
S h um operador exclusivo para strings: . concatenao
7.3 - de atribuio
Existe um operador bsico de atribuio e diversos derivados. Sempre retornam o valor atribudo. No caso dos operadores derivados de atribuio, a operao feita entre os dois operandos, sendo atribudo o resultado para o primeiro. A atribuio sempre por valor, e no por referncia. = += -= *= /= %= .= atribuio simples atribuio com adio atribuio com subtrao atribuio com multiplicao atribuio com diviso atribuio com mdulo atribuio com concatenao
7.5 - Lgicos
Utilizados para inteiros representando valores booleanos. and or xor ! && || e lgico ou lgico ou exclusivo no (inverso) e lgico ou lgico
Existem dois operadores para e e para ou porque eles tm diferentes posies na ordem de precedncia.
7.6 - Comparao
As comparaes so feitas entre os valores contidos nas variveis, e no as referncias. Sempre retornam um valor booleano. == != < > <= a >= maior ou igual a igual a diferente de menor que maior que menor ou igual
(expressao1)?(expressao2):( expressao3)
o interpretador PHP avalia a primeira expresso. Se ela for verdadeira, a expresso retorna o valor de expresso2. Seno, retorna o valor de expresso3.
Podem ser utilizados de duas formas: antes ou depois da varivel. Quando utilizado antes, retorna o valor da varivel antes de increment-la ou decrement-la. Quando utilizado depois, retorna o valor da varivel j incrementado ou decrementado.
Exemplos: $a = $b = 10; // $a e $b recebem o valor 10 $c = $a++; // $c recebe 10 e $a passa a ter 11 $d = ++$b; // $d recebe 11, valor de $b j incrementado
Desenvolvimento PHP - 7 - Operadores - Pgina 30 de 79
8 - Estruturas de Controle
As estruturas que veremos a seguir so comuns para as linguagens de programao imperativas, bastando, portanto, descrever a sintaxe de cada uma delas, resumindo o funcionamento.
8.1 - Blocos
Um bloco consiste de vrios comandos agrupados com o objetivo de relacion-los com determinado comando ou funo. Em comandos como if, for, while, switch e em declaraes de funes blocos podem ser utilizados para permitir que um comando faa parte do contexto desejado. Blocos em PHP so delimitados pelos caracteres { e }. A utilizao dos delimitadores de bloco em uma parte qualquer do cdigo no relacionada com os comandos citados ou funes no produzir efeito algum, e ser tratada normalmente pelo interpretador.
8.2.1 - if
O mais trivial dos comandos condicionais o if. Ele testa a condio e executa o comando indicado se o resultado for true (valor diferente de zero). Ele possui duas sintaxes:
O else um complemento opcional para o if. Se utilizado, o comando ser executado se a expresso retornar o valor false (zero). Suas duas sintaxes so:
if (expresso) comando; else comando; if (expresso): comando; ... comando; else comando; ... comando; endif;
A seguir, temos um exemplo do comando if utilizado com else:
if (expressao1) comando1; else if (expressao2) comando2; else if (expressao3) comando3; else comando4;
foi criado o comando, tambm opcional elseif. Ele tem a mesma funo de um else e um if usados sequencialmente, como no exemplo acima. Num mesmo if podem ser utilizados diversos elseifs, ficando essa utilizao a critrio do programador, que deve zelar pela legibilidade de seu script.
O comando elseif tambm pode ser utilizado com dois tipos de sintaxe. Em resumo, a sintaxe geral do comando if fica das seguintes maneiras:
if (expressao1) comando; [ elseif (expressao2) comando; ] [ else comando; ] if (expressao1) : comando; ... comando; [ elseif (expressao2) comando; ... comando; ] [ else comando; ... comando; ] endif;
8.2.2 - switch
O comando switch atua de maneira semelhante a uma srie de comandos if na mesma expresso. Frequentemente o programador pode querer comparar uma varivel com diversos valores, e executar um cdigo diferente a depender de qual valor igual ao da varivel. Quando isso for necessrio, deve-se usar o comando switch. O exemplo seguinte mostra dois trechos de cdigo que fazem a mesma coisa, sendo que o primeiro utiliza uma srie de ifs e o segundo utiliza switch:
if ($i == 0) print i igual a zero; elseif ($i == 1) print i igual a um; elseif ($i == 2) print i igual a dois; switch ($i) { case 0: print i igual a zero; break; case 1: print i igual a um; break; case 2: print i igual a dois; break; }
importante compreender o funcionamento do switch para no cometer enganos. O comando switch testa linha a linha os cases encontrados, e a partir do momento que encontra um valor igual ao da varivel testada, passa a executar todos os comandos seguintes, mesmo os que fazem parte de outro teste, at o fim do bloco. por isso usa-se o comando break, quebrando o fluxo e fazendo com que o cdigo seja executado da maneira desejada. Veremos mais sobre o break mais adiante. Veja o exemplo:
switch ($i) { case 0: print i igual a zero; case 1: print i igual a um; case 2: print i igual a dois; }
No exemplo acima, se $i for igual a zero, os trs comandos print sero executados. Se $i for igual a 1, os dois ltimos print sero executados. O comando s funcionar da maneira desejada se $i for igual a 2. Em outras linguagens que implementam o comando switch, ou similar, os valores a serem testados s podem ser do tipo inteiro. Em PHP permitido usar valores do tipo string como elementos de teste do comando switch. O exemplo abaixo funciona perfeitamente:
switch ($s) { case casa: print A casa amarela; case arvore: print a rvore bonita; case lampada: print joao apagou a lampada; }
8.3.3 - for
O tipo de lao mais complexo o for. Para os que programam em C, C++ ou Java, a assimilao do funcionamento do for natural. Mas para aqueles que esto acostumados a linguagens como Pascal, h uma grande mudana para o uso do for. As duas sintaxes permitidas so:
while ($x > 0) { ... if ($x == 20) { echo erro! x = 20; break; ... }
No trecho de cdigo acima, o lao while tem uma condio para seu trmino normal ($x <= 0), mas foi utilizado o break para o caso de um trmino no previsto no incio do lao. Assim o interpretador seguir para o comando seguinte ao lao.
8.4.2 - Continue
O comando continue tambm deve ser utilizado no interior de laos, e funciona de maneira semelhante ao break, com a diferena que o fluxo ao invs de sair do lao volta para o incio dele. Vejamos o exemplo:
9 - Funes
9.1 - Definindo funes
A sintaxe bsica para definir uma funo :
9.3 - Argumentos
possvel passar argumentos para uma funo. Eles devem ser declarados logo aps o nome da funo, entre parnteses, e tornam-se variveis pertencentes ao escopo local da funo. A declarao do tipo de cada argumento tambm utilizada apenas para efeito de documentao.
function mais5(&$num1, $num2) { $num1 += 5; $num2 += 5; } $a = $b = 1; mais5($a, $b); /* Neste caso, s $num1 ter seu valor alterado, pois a passagem por referncia est definida na declarao da funo. */ mais5($a, &$b); /* Aqui as duas variveis tero seus valores alterados. */
function teste($vivas = testando) { echo $vivas; } teste(); // imprime testando teste(outro teste); // imprime outro teste
bom lembrar que quando a funo tem mais de um parmetro, o que tem valor default deve ser declarado por ltimo:
function teste($figura = circulo, $cor) { echo a figura um , $figura, de cor $cor; } teste(azul); /* A funo no vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A declarao correta : */ function teste2($cor, $figura = circulo) { echo a figura um , $figura, de cor $cor; } teste2(azul); /* Aqui a funcao funciona da maneira esperada, ou seja, imprime o texto: a figura um crculo de cor azul */
9.4 - Contexto
O contexto o conjunto de variveis e seus respectivos valores num determinado ponto do programa. Na chamada de uma funo, ao iniciar a execuo do bloco que contm a implementao da mesma criado um novo contexto, contendo as variveis declaradas dentro do bloco, ou seja, todas as variveis utilizadas dentro daquele bloco sero eliminadas ao trmino da execuo da funo.
9.5 - Escopo
O escopo de uma varivel em PHP define a poro do programa onde ela pode ser utilizada. Na maioria dos casos todas as variveis tm escopo global. Entretanto, em funes definidas pelo usurio um escopo local criado. Uma varivel de escopo global no pode ser utilizada no interior de uma funo sem que haja uma declarao.
Exemplo: $vivas = Testando; function Teste() { global $vivas; echo $vivas; } Teste();
Uma declarao global pode conter vrias variveis, separadas por vrgulas. Uma outra maneira de acessar variveis de escopo global dentro de uma funo utilizando um array prdefinido pelo PHP cujo nome $GLOBALS. O ndice para a varivel referida o proprio nome da varivel, sem o caracter $. O exemplo acima e o abaixo produzem o mesmo resultado:
Exemplo: $vivas = "Testando"; function Teste() { echo $GLOBALS["vivas"]; // imprime $vivas echo $vivas; // no imprime nada } Teste();
10 - Variveis e Constantes
10.1 - Declarao de uma varivel
Como a tipagem em PHP dinmica, as variveis no precisam ser declaradas. Uma varivel inicializada no momento em que feita a primeira atribuio. O tipo da varivel ser definido de acordo com o valor atribudo.
$a = teste; $$a = Mauricio Vivas; O exemplo acima e equivalente ao seguinte: $a = teste; $teste = Mauricio Vivas;
10.4.1 - URLencode
O formato urlencode obtido substituindo os espaos pelo caracter + e todos os outros caracteres no alfa-numricos (com exceo de _) pelo caracter % seguido do cdigo ASCII em hexadecimal. Por exemplo: o texto Testando 1 2 3 !! em urlencode fica Testando+1+2+3+%21%21 O PHP possui duas funes para tratar com texto em urlencode. Seguem suas sintaxes:
Ao submeter o formulrio POST, o script que recebe os valores submetidos ter uma varivel chamada $_POST[teste] contendo os valores marcados num array, com ndices a partir de zero. Assim, se forem marcadas as opoes 2, 3 e 5, poderemos fazer as seguintes afirmaes:
$_POST[teste] == array(valor2, valor3, valor5); $_POST[teste][0] == valor2; $_POST[teste][1] == valor3; $_POST[teste][2] == valor5;
O mesmo artifcio pode ser utilizado com outros elementos de formulrios e at com cookies.
class Nome_da_classe { var $variavel1; var $variavel2; function funcao1 ($parametro) { /* === corpo da funo === */ } }
11.2 - Objeto
Como foi dito anteriormente, classes so tipos, e no podem ser atribudas a variveis. Variveis do tipo de uma classe so chamadas de objetos, e devem ser criadas utilizando o operador new, seguindo o exemplo abaixo:
$variavel->funcao1(
class conta { var $saldo; function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; } } $minhaconta = new conta; $minhaconta->saldo(); // a variavel interna no foi // inicializada, e no contm // valor algum $minhaconta->credito(50); $minhaconta->saldo(); // retorna 50
Desenvolvimento PHP - 11. Classes e Objetos - Pgina 45 de 79
11.4 - SubClasses
Uma classe pode ser uma extenso de outra. Isso significa que ela herdar todas as variveis e funes da outra classe, e ainda ter as que forem adicionadas pelo programador. Em PHP no permitido utilizar herana mltipla, ou seja, uma classe pode ser extenso de apenas uma outra.Para criar uma classe extendida, ou derivada de outra, deve ser utilizada a palavra reservada extends, como pode ser visto no exemplo seguinte:
class novaconta extends conta { var $num; function numero() { return $this->num; } }
A classe acima derivada da classe conta, tendo as mesmas funes e variveis, com a adio da varivel $numero e a funo numero().
11.5 - Construtores
Um construtor uma funo definida na classe que automaticamente chamada no momento em que a classe instanciada (atravs do operador new). O construtor deve ter o mesmo nome que a classe a que pertence. Veja o exemplo:
class conta { var $saldo; function conta () { $this.saldo = 0; } function saldo() { return $this->saldo; } function credito($valor) { $this->saldo += $valor; } }
Podemos perceber que a classe conta agora possui um construtor, que inicializa a varivel $saldo com o valor 0. Um construtor pode conter argumentos, que so opcionais, o que torna esta ferramenta mais poderosa. No exemplo acima, o construtor da classe conta pode receber como argumento um valor, que seria o valor inicial da conta. Vale observar que para classes derivadas, o construtor da classe pai no automaticamente herdado quando o construtor da classe derivada chamado.
12 - Noes de SQL
12.1 - Introduo
Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas sua manipulao. O Departamento de Pesquisas da IBM, desenvolveu a SQL como forma de interface para o sistema de BD relacional denominado SYSTEM R, incio dos anos 70. Em 1986 o American National Standard Institute ( ANSI ), publicou um padro SQL. A SQL estabeleceu-se como linguagem padro de Banco de Dados Relacional. SQL apresenta uma srie de comandos que permitem a definio dos dados, chamada de DDL (Data Definition Language), composta entre outros pelos comandos Create, que destinado a criao do Banco de Dados, das Tabelas que o compe, alm das relaes existentes entre as tabelas. Como exemplo de comandos da classe DDL temos os comandos Create, Alter e Drop. Os comandos da srie DML (Data Manipulation Language), destinados a consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea. Como exemplo de comandos da classe DML temos os comandos Select, Insert, Update e Delete. Uma subclasse de comandos DML, a DCL (Data Control Language), dispe de comandos de controle como Grant e Revoke. A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar ndices, sem a necessidade de controle individualizado de ndice corrente, algo muito comum nas linguagens de manipulao de dados do tipo registro a registro. Outra caracterstica muito importante disponvel em SQL sua capacidade de construo de vises, que so formas de visualizarmos os dados na forma de listagens independente das tabelas e organizao lgica dos dados. Outra caracterstica interessante na linguagem SQL a capacidade que dispomos de cancelar uma srie de atualizaes ou de as gravarmos, depois de iniciarmos uma seqncia de atualizaes. Os comandos Commit e Rollback so responsveis por estas facilidades. Devemos notar que a linguagem SQL consegue implementar estas solues, somente pelo fato de estar baseada em Banco de Dados, que garantem por si mesmo a integridade das relaes existentes entre as tabelas e seus ndices.
CREATE DATABASE < nome_db >; onde: nome_db - indica o nome do Banco de Dados a ser criado.
Sintaxe:
CREATE TABLE < nome_tabela > ( nome_atributo1 < tipo > [ NOT NULL ], nome_atributo2 < tipo > [ NOT NULL ], ...... nome_atributoN < tipo > [ NOT NULL ] );
onde: nome_table - indica o nome da tabela a ser criada. nome_atributo - indica o nome do campo a ser criado na tabela. tipo - indica a definio do tipo de atributo ( integer(n), char(n), ... ).
ALTER TABLE < nome_tabela > ADD / DROP ( nome_atributo1 < tipo > [ NOT NULL ], nome_atributoN < tipo > [ NOT NULL ] );
SELECT [DISTINCT] expressao [AS nom-atributo] [FROM from-list] [WHERE condicao] [ORDER BY attr_name1 [ASC | DESC ]]
onde: DISTINCT : Para eliminar linhas duplicadas na sada. Expressao: Define os dados que queremos na sada, normalmente uma ou mais colunas de uma tabela da lista FROM. AS nom-atributo : um alias para o nome da coluna, exemplo: FROM : lista das tabelas na entrada WHERE : critrios da seleo ORDER BY : Critrio de ordenao das tabelas de sada. ASC ordem ascendente, DESC ordem descendente Exemplo:
INSERT INTO destino [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...])
A instruo INSERT INTO tem as partes abaixo: Destino- O nome da tabela ou consulta em que os registros devem ser anexados. campo1, campo2 - Os nomes dos campos aos quais os dados devem ser anexados valor1, valor2 - Os valores para inserir em campos especficos do novo registro. Cada valor inserido no campo que corresponde posio do valor na lista: Valor1 inserido no campo1 do novo registro, valor2 no campo2 e assim por diante. Voc deve separar os valores com uma vrgula e colocar os campos de textos entre aspas (" ").
Desenvolvimento PHP - 12 - Noes de SQL - Pgina 48 de 79
UPDATE tabela SET campo1 = valornovo, ... WHERE critrio; Onde: Tabela - O nome da tabela cujos os dados voc quer modificar. Valornovo - Uma expresso que determina o valor a ser inserido em um campo especfico nos registros atualizados. critrio - Uma expresso que determina quais registros devem ser atualizados. S os registros que satisfazem a expresso so atualizados. UPDATE especialmente til quando voc quer alterar muitos registros ou quando os registros que voc quer alterar esto em vrias tabelas. Voc pode alterar vrios campos ao mesmo tempo. UPDATE no gera um conjunto de resultados. Se voc quiser saber quais resultados sero alterados, examine primeiro os resultados da consulta seleo que use os mesmos critrios e ento execute a consulta atualizao.
O valor de retorno um inteiro que identifica a conexo, ou falso se a conexo falhar. Antes de tentar estabelecer uma conexo, o interpretador PHP verifica se j existe uma conexo estabelecida com o mesmo host, o mesmo login e a mesma senha. Se existir, o identificador desta conexo retornado. Seno, uma nova conexo criada. Uma conexo estabelecida com o comando mysql_connect encerrada ao final da execuo do script. Para encerr-la antes disso deve ser utilizado o comando mysql_close, que tem a seguinte assinatura:
result o identificador do resultado; linha o nmero da linha, iniciado por 0; campo uma string com o nome do campo, ou um nmero correspondente ao nmero da coluna. Se foi utilizado um alias na consulta, este deve ser utilizado no comando mysql_result. Este comando deve ser utilizado apenas para resultados pequenos. Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir: array mysql_fetch_array(int result);
L uma linha do resultado e devolve um array, cujos ndices so os nomes dos campos. A execuo seguinte do mesmo comando ler a prxima linha, at chegar ao final do resultado.
$query = mysql_query(SELECT Nome FROM Clientes); while($row = mysql_fetch_array($query)) { echo $row[Nome]; echo <BR>; }
int pg_connect(string host, string porta, string opcoes, string tty, string db); int pg_pconnect(string host, string porta, string opcoes, string tty, string db);
O valor de retorno um inteiro que identifica a conexo, ou falso se a conexo falhar. Uma conexo estabelecida com o comando pg_connect encerrada ao final da execuo do script. Para encerr-la antes disso deve ser utilizado o comando pg_close, que tem a seguinte assinatura:
result o identificador do resultado; linha o nmero da linha, iniciado por 0; campo uma string com o nome do campo, ou um nmero correspondente ao nmero da coluna. Se foi utilizado um alias na consulta, este deve ser utilizado no comando pg_result.
Este comando deve ser utilizado apenas para resultados pequenos. Quando o volume de dados for maior, recomendado utilizar um dos mtodos a seguir:
15 - Utilizando headers
O comando header permite enviar cabealhos html para o cliente. Deve ser utilizado por usurios que conheam a funo de cada header que pode ser enviado. No pode ser enviado depois de algum texto. veja o seguinte exemplo:
//redirecionar para outra pgina: header("Location: http://www.php.net"); // Definir o script como uma mensagem de erro: header("http/1.0 404 Not Found"); // Definir a expirao da pgina: header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Pragma: nocache"); // HTTP/1.0
Para obter uma lista completa dos headers HTTP, visite o seguinte endereo:
http://www.w3.org/Protocols/rfc2068/rfc2068
int setcookie(string nome, string valor, int exp, string path, string dominio, int secure); onde: nome: nome do cookie; valor: valor armazenado no cookie; exp: data de expirao do cookie (opcional), no formato Unix. Se no for definida, o cookie ser de sesso; path: path do script que gravou o cookie; dominio: domnio responsvel pelo cookie; secure: se tiver valor 1, indica que o cookie s pode ser transmitido por uma conexo segura (https). Observaes: Um cookie no pode ser recuperado na mesma pgina que o gravou, a menos que esta seja recarregada pelo browser. Mltiplas chamadas funo setcookie sero executadas em ordem inversa; Cookies s podem ser gravados antes do envio de qualquer informao para o cliente. Portanto todas as chamadas funo setcookie devem ser feitas antes do envio de qualquer header ou texto.
16.3 Sesses
O suporte a sesses no PHP consiste em uma forma de preservar certos dados atravs de acessos subseqentes. Isto te permite construir aplicaes mais personalizadas e aumenta a atrao ao seu web site. Um visitante acessando seu web site est determinado por uma nica identificao, a ento chamada id de sesso. Esta ou guardada em um cookie do lado do usurio ou est na URL. Todo script PHP que vai utilizar uma sesso deve chamar a funo session_start() antes dos outros comandos. A partir do PHP 4.1.0, as variveis de sesso ficam disponveis no array global $_SESSION. Exemplo: Registrando uma varivel com $_SESSION. <?php session_start(); // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0; } else { $_SESSION['count']++; } ?> Exemplo: Desregistrando uma varivel com $_SESSION. <?php session_start(); // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less unset($_SESSION['count']); ?>
17 - Manipulando arquivos
Atravs do PHP possvel ter acesso aos arquivos do sistema, e at arquivos remotos. A seguir veremos alguns dos comandos utilizados para manipular arquivos no PHP.
void clearstatcache();
A palavra void indica que a funo no retorna valor algum. As funes filesize e file_exists utilizam cache.
O primeiro argumento uma string contendo o nome do arquivo; o segundo, o modo como o arquivo ser aberto, que pode ser um dos seguintes: r Abre o arquivo com permisso apenas para leitura. r+ Abre o arquivo com permisso para escrita e leitura, posicionando o ponteiro no incio do mesmo. w Abre o arquivo com permisso apenas para escrita. Se o arquivo existir, todo o contedo apagado. Se no existir, o PHP tenta cri-lo. O ponteiro posicionado no incio do arquivo w+ Abre o arquivo com permisso para escrita e leitura. Se o arquivo existir, todo o contedo apagado. Se no existir, o PHP tenta cri-lo. O ponteiro posicionado no incio do arquivo a Abre o arquivo com permisso apenas para escrita. Se o arquivo no existir, o PHP tenta cri-lo. O ponteiro posicionado no final do arquivo a+ Abre o arquivo com permisso para escrita e leitura. Se o arquivo no existir, o PHP tenta cri-lo. O ponteiro posicionado no final do arquivo. O ponteiro citado na tabela dos modos de abrir um arquivo refere-se posio a partir de onde os dados sero lidos e/ou gravados. Para alterar a posio desse ponteiro, pode-se utilizar a funo fseek:
A funo fread binary-safe, ou seja, pode ser usada para ler o contedo de um arquivo binrio. Obviamente nesse caso preciso saber exatamente onde utilizar o valor lido, para no obter resultados indesejados.
Exemplo
Para demonstrar a leitura de um arquivo, utilizaremos um exemplo que necessita apenas de uma imagem do tipo GIF, que deve estar no mesmo diretrio que nosso script de exemplo.
<? $arquivo = teste.gif; /* este nome deve ser alterado para o nome do arquivo a ser utilizado */ $id = fopen($arquivo, r); /* abre o arquivo para leitura */ $conteudo = fread($id,filesize($arquivo)); /* le o conteudo do arquivo e grava na variavel $conteudo */ fclose($id); /* fecha o arquivo */ header(Content-type: image/gif); /* esta linha envia um header ao browser informando que o tipo de arquivo que est sendo enviado uma imagem no formato gif */ echo $conteudo; /* esta ltima linha envia ao browser o contedo do arquivo */ ?>
Para que o exemplo funcione corretamente preciso que o script seja apenas o que est listado, no podendo haver texto algum (nem mesmo espao ou linha em branco) antes e depois do script. Visualisando o script pelo browser, teremos a imagem selecionada.
$_FILES['userfile']['name'] O nome original do arquivo no computador do usurio. $_FILES['userfile']['type'] O tipo mime do arquivo, se o browser deu esta informao. Um exemplo pode ser "image/gif". $_FILES['userfile']['size'] O tamanho, em bytes, do arquivo. $_FILES['userfile']['tmp_name'] O nome temporrio do arquivo, como foi guardado no servidor. $_FILES['userfile']['error'] O cdigo de erro associado a este upload de arquivo. ['error'] foi adicionado no PHP 4.2.0
Desenvolvimento PHP - 17 - Manipulando arquivos - Pgina 59 de 79
Neste exemplo, meu arquivo o nome do elemento do formulrio. Para armazenar o contedo de um arquivo numa tabela da base de dados ou at num arquivo definitivo (neste segundo caso mais simples utilizar a funo copy) podemos utilizar o seguinte script, supondo que o campo do formulrio tenha o nome teste:
<? /* abre o arquivo para leitura */ $id = fopen($_FILES[teste][tmp_name], r); /* le o conteudo do arquivo e grava na variavel $conteudo */ $teste_conteudo = fread($id,filesize($_FILES[teste][tmp_name])); /* fecha o arquivo */ fclose($id); ?>
Com o exemplo acima, teremos o conteudo do arquivo enviado armazenado na string $teste_conteudo, podendo assim ser armazenado onde for mais adequado.
18 - Enviando e-mail
Para enviar e-mail atravs de um script PHP bastante simples. Basta utilizar a funo mail:
www.php.net Site oficial do PHP Aqui seu ponto de partida do PHP. Aqui voc baixa o manual do PHP, tem acesso s atualizaes, referncias, listas de discursso, etc. www.phpbrasil.com Site da comunidade PHP aqui no Brasil. Muito til, cheio de scripts prontos, matrias e bastante gente disposta a ajudar. www.mysql.com Site oficial do Banco de Dados MySQL Aqui voc encontra o manual do MySQL, referncia e muito mais. www.postgresql.org Site do Banco de Dados PostgreSQL. www.w3schools.com Site completo com referncias e tutoriais de HTML, XHML, JavaScript, etc. com padronizao dos recursos. www.google.com.br Como no poderia deixar de citar, o Google uma grande fonte de pesquisa para todo desenvolvedor de qualquer linguagem...
21 Bibliografia e Referncias
Esta apostila foi baseada na apostila Aplicaes Web em PHP, de Maurcio Vivas - Comit de Incentivo a Produo do Software Gratuito e Alternativo www.cipsga.org.br cursos@cipsga.org.br / mauricio@cipsga.org.br Outras fontes de pesquisa: MARTINI, Jlio Csar. Instalao do PHP, Apache e MySQL - www.imasters.com.br OTSUKA, Joice Lee. Tutorial Como Criar Documentos Interativos no WWW http://penta.ufrgs.br/edu/forms/tut0.html Manual do PHP www.php.net
htmlentities
string htmlentities(string str);
Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte todos os caracteres da string que possuem uma representao especial em html, como por exemplo: 1. para 'º' 2. para 'ª' 3. para 'á' 4. para ç'
nl2br
string nl2br(string str);
Retorna a string fornecida substituindo todas as quebras de linha (\n) por quebras de linhas em html (<br>).
get_meta_tags
array get_meta_tags(string arquivo);
Abre um arquivo html e percorre o cabealho em busca de meta tags, retornando num array todos os valores encontrados.
Exemplo: No arquivo teste.html temos: ... <head> <meta name="author" content="jose"> <meta name="tags" content="php3 documentation"> ...
Desenvolvimento PHP - APNDICE 01 - Funes para tratamento de strings - Pgina 64 de 79
</head><!-- busca encerra aqui --> ... a execuo da funo: get_meta_tags(teste.html); retorna o array: array(author=>jose,tags=>"php3 documentation");
strip_tags
string strip_tags(string str);
Retorna a string fornecida, retirando todas as tags html e/ou PHP encontradas.
urlencode
string urlencode(string str);
Retorna a string fornecida, convertida para o formato urlencode. Esta funo til para passar variveis para uma prxima pgina.
urldecode
string urldecode(string str);
Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato urlencode para texto normal.
Exemplo: $partes = array("a", "casa nmero", 13, " azul"); $inteiro = join(" ",$partes); $inteiro passa a conter a string: a casa nmero 13 azul
Desenvolvimento PHP - APNDICE 01 - Funes para tratamento de strings - Pgina 65 de 79
split
array split(string padrao, string str, int [limite]);
Retorna um array contendo partes da string fornecida separadas pelo padro fornecido, podendo limitar o nmero de elementos do array.
Exemplo: $data = 11/14/1975; $data_array = split(/,$data); O cdigo acima faz com que a varivel $data_array receba o valor: array(11,14,1975);
explode
array explode(string padrao, string str);
Funciona de maneira bastante semelhante funo split, com a diferena que no possvel estabelecer um limite para o nmero de elementos do array.
Exemplo: $num = similar_text("teste", "testando",&$porc); As variveis passam a ter os seguintes valores: $num == 4; $porc == 61.538461538462
strcasecmp
int strcasecmp(string str1, string str2);
Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um valor menor que zero se str1 < str2. Esta funo case insensitive, ou seja, maisculas e minsculas so tratadas como iguais.
strcmp
int strcasecmp(string str1, string str2);
Funciona de maneira semelhante funo strcasecmp, com a diferena que esta case sensitive, ou seja, maisculas e minsculas so tratadas como diferentes.
Desenvolvimento PHP - APNDICE 01 - Funes para tratamento de strings - Pgina 66 de 79
strstr
string strstr(string str1, string str2); string strchr(string str1, string str2);
As duas funes so idnticas. Procura a primeira ocorrncia de str2 em str1. Se no encontrar, retorna uma string vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto.
stristr
string strstr(string str1, string str2);
Funciona de maneira semelhante funo strstr, com a diferena que esta case insensitive, ou seja, maisculas e minsculas so tratadas como iguais.
strpos
int strpos(string str1, string str2, int [offset] );
Retorna a posio da primeira ocorrncia de str2 em str1, ou zero se no houver. O parmetro opcional offset determina a partir de qual caracter de str1 ser efetuada a busca. Mesmo utilizando o offset, o valor de retorno referente ao incio de str1.
strrpos
int strrpos(string haystack, char needle);
Retorna a posio da ltima ocorrncia de str2 em str1, ou zero se no houver.
ltrim
string ltrim(string str);
Retira espaos e linhas em branco do final da string fornecida.
trim
string trim(string str);
Retira espaos e linhas em branco do incio e do final da string fornecida.
strrev
string strrev(string str);
Retorna a string fornecida invertida.
strtolower
string strtolower(string str);
Retorna a string fornecida com todas as letras minsculas.
strtoupper
string strtoupper(string str);
Retorna a string fornecida com todas as letras maisculas.
ucfirst
string ucfirst(string str);
Retorna a string fornecida com o primeiro caracter convertido para letra maiscula.
ucwords
string ucwords(string str);
Retorna a string fornecida com todas as palavras iniciadas por letras maisculas.
Desenvolvimento PHP - APNDICE 01 - Funes para tratamento de strings - Pgina 68 de 79
str_replace
string str_replace(string str1, string str2, string str3);
Altera todas as ocorrncias de str1 em str3 pela string str2.
ord
int ord(string string);
Retorna o cdigo ASCII correspontente ao caracter fornecido.
echo
echo(string arg1, string [argn]... );
Imprime os argumentos fornecidos.
print
print(string arg);
Imprime o argumento fornecido.
strlen
int strlen(string str);
Retorna o tamanho da string fornecida.
Exemplo 1 $teste = array("um", "dois","tr"=>"tres",5=>"quatro","cinco"); Temos o seguinte mapeamento: 0 => um (0 o primeiro ndice, se no houver um explicito) 1 => dois (o inteiro seguinte) tr => tres 5 => quatro (valor explicitado) 6 => cinco (o inteiro seguinte ao ltimo atribudo, e no o prximo valor, que seria 2) Exemplo 2 $teste = array("um", 6=>"dois","tr"=>"tres",5=>"quatro","cinco"); Temos o seguinte mapeamento: 0 => um 6 => dois tr => tres 5 => quatro (seria 7, se no fosse explicitado) 7 => cinco (seria 6, se no estivesse ocupado)
Em geral, no recomendvel utilizar arrays com vrios tipos de ndices, j que isso pode confundir o programador. No caso de realmente haver a necessidade de utilizar esse recurso, deve-se ter bastante ateno ao manipular os ndices do array.
range
array range(int minimo, int maximo);
A funo range cria um array cujos elementos so os inteiros pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parmetro for maior do que o do segundo, a funo retorna false (valor vazio).
shuffle
void shuffle(array &arr);
Esta funo embaralha o array, ou seja, troca as posies dos elementos aleatoriamente e no retorna valor algum.
sizeof
int sizeof(array arr);
Retorna um valor inteiro contendo o nmero de elementos de um array. Se for utilizada com uma varivel cujo valor no do tipo array, retorna 1. Se a varivel no estiver setada ou for um array vazio, retorna 0.
Funes de navegao
Toda varivel do tipo array possui um ponteiro interno indicando o prximo elemento a ser acessado no caso de no ser especificado um ndice. As funes seguintes servem para modificar esse ponteiro, permitindo assim percorrer um array para verificar seu contedo (chaves e elementos).
reset
mixed reset(array arr);
Seta o ponteiro interno para o primeiro elemento do array, e retorna o contedo desse elemento.
end
mixed end(array arr);
Seta o ponteiro interno para o ltimo elemento do array, e retorna o contedo desse elemento.
next
mixed next(array arr);
Seta o ponteiro interno para o prximo elemento do array, e retorna o contedo desse elemento. Obs.: esta no uma boa funo para determinar se um elemento o ltimo do array, pois pode retornar false tanto no final do array como no caso de haver um elemento vazio.
prev
mixed prev(array arr);
Seta o ponteiro interno para o elemento anterior do array, e retorna o contedo desse elemento. Funciona de maneira inversa a next.
pos
mixed pos(array arr);
Retorna o contedo do elemento atual do array, indicado pelo ponteiro interno.
key
mixed key(array arr);
Funciona de maneira bastante semelhante a pos, mas ao invs de retornar o elemento atual indicado pelo ponteiro interno do array, retorna seu ndice.
each
array each(array arr);
Desenvolvimento PHP - APNDICE 02 - Funes para tratamento de arrays - Pgina 71 de 79
Retorna um array contendo o ndice e o elemento atual indicao pelo ponteiro interno do array. o valor de retorno um array de quatro elementos, cujos ndices so 0, 1, key e value. Os elementos de ndices 0 e key armazenam o ndice do valor atual, e os elementos de ndices 1 e value contm o valor do elemento atual indicado pelo ponteiro. Esta funo pode ser utilizada para percorrer todos os elementos de um array e determinar se j foi encontrado o ltimo elemento, pois no caso de haver um elemento vazio, a funo no retornar o valor false. A funo each s retorna false depois q o ltimo elemento do array foi encontrado.
Exemplo: /*funo que percorre todos os elementos de um array e imprime seus ndices e valores */ function imprime_array($arr) { reset($arr); while (list($chave,$valor) = each($arr)) echo Chave: $chave. Valor: $valor; }
Funes de ordenao
So funes que servem para arrumar os elementos de um array de acordo com determinados critrios. Estes critrios so: manuteno ou no da associao entre ndices e elementos; ordenao por elementos ou por ndices; funo de comparao entre dois elementos.
sort
void sort(array &arr); A funo mais simples de ordenao de arrays. Ordena os elementos de um array em ordem crescente, sem manter os relacionamentos com os ndices.
rsort
void rsort(array &arr);
Funciona de maneir ainversa funo sort. Ordena os elementos de um array em ordem decrescente, sem manter os relacionamentos com os ndices.
asort
void asort(array &arr);
Tem o funcionamento bastante semelhante funo sort. Ordena os elementos de um array em ordem crescente, porm mantm os relacionamentos com os ndices.
arsort
void arsort(array &arr);
Funciona de maneira inversa funo asort. Ordena os elementos de um array em ordem decrescente e mantm os relacionamentos dos elementos com os ndices.
ksort
void ksort(array &arr);
Funo de ordenao baseada nos ndices. Ordena os elementos de um array de acordo com seus ndices, em ordem crescente, mantendo os relacionamentos.
usort
void usort(array &arr, function compara);
Esta uma funo que utiliza outra funo como parmetro. Ordena os elementos de um array sem manter os relacionamentos com os ndices, e utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.
uasort
void uasort(array &arr, function compara);
Esta funo tambm utiliza outra funo como parmetro. Ordena os elementos de um array e mantm os relacionamentos com os ndices, utilizando para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.
uksort
void uksort(array &arr, function compara);
Esta funo ordena o array atravs dos ndices, mantendo os relacionamentos com os elementos., e utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois ndices do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.
to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: E. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. F. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). G. State on the Title page the name of the publisher of the Modified Version, as the publisher. H. Preserve all the copyright notices of the Document. I. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
J. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. K. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. L. Include an unaltered copy of this License. M. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. N. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. O. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. P. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Q. Delete any section entitled "Endorsements". Such a section may not be included in the Modified
Desenvolvimento PHP - GNU Free Documentation License - Pgina 76 de 79
Version. R. N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. S. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires especial permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents. To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.