Escolar Documentos
Profissional Documentos
Cultura Documentos
ndice
CURSO DE PHP GRATUITO........................................................................................I
APOSTILA FORNECIDA GRATUITAMENTE POR:...............................................I
WWW.E-BOOK-GRATUITO.BLOGSPOT.COM.......................................................I
NDICE............................................................................................................................II
NOTAS DO AUTOR......................................................................................................10
01. INTRODUO.........................................................................................................12
O MTODO GET.......................................................................................17
HEADERS.................................................................................................18
O MTODO POST.....................................................................................19
UTILIZANDO GET E POST.......................................................................19
03. FORMULRIOS HTML.........................................................................................20
DEFININDO UM FORMULRIO........................................................................20
A TAG <INPUT>........................................................................................20
CAMPO DE TEXTO.....................................................................................21
Parmetros:.....................................................................................21
CAMPO DE TEXTO COM MSCARA...............................................................21
Parmetros:.....................................................................................21
CHECKBOX...............................................................................................22
Parmetros:.....................................................................................22
RADIO BUTTON.........................................................................................22
Parmetros:.....................................................................................22
SUBMIT BUTTON.......................................................................................22
Parmetros:.....................................................................................23
RESET BUTTON.........................................................................................23
Parmetros:.....................................................................................23
BUTTON...................................................................................................23
Parmetros:.....................................................................................23
TEXTAREA...............................................................................................23
Parmetros:.....................................................................................23
SELECT....................................................................................................24
Parmetros:.....................................................................................24
UPLOAD DE ARQUIVOS................................................................................24
Parmetros:.....................................................................................25
04. INSTALAO E CONFIGURAO EM AMBIENTE WINDOWS................26
ii
SERVIDOR APACHE....................................................................................26
PHP.......................................................................................................27
MYSQL...................................................................................................28
05. INSTALAO E CONFIGURAO EM AMBIENTE LINUX REDHAT.....30
TIPOS SUPORTADOS...................................................................................35
Inteiros (integer ou long)..................................................................35
Nmeros em Ponto Flutuante (double ou float)...............................36
Strings...............................................................................................36
Significado................................................................................................................37
Arrays...............................................................................................37
Listas..............................................................................................................................38
Objetos..............................................................................................39
Booleanos.........................................................................................39
TRANSFORMAO DE TIPOS.........................................................................39
Coeres...........................................................................................39
Transformao explcita de tipos.....................................................40
Com a funo settype........................................................................41
08. OPERADORES.........................................................................................................42
ARITMTICOS............................................................................................42
DE STRINGS...............................................................................................42
BIT A BIT..................................................................................................42
DE ATRIBUIO..........................................................................................42
LGICOS..................................................................................................43
COMPARAO...........................................................................................43
EXPRESSO CONDICIONAL...........................................................................44
DE INCREMENTO E DECREMENTO...................................................................44
DE ERRO...................................................................................................45
ORDEM DE PRECEDNCIA.............................................................................45
09. ESTRUTURAS DE CONTROLE...........................................................................47
BLOCOS...................................................................................................47
COMANDOS DE SELEO.............................................................................47
if........................................................................................................47
switch................................................................................................50
COMANDOS DE REPETIO...........................................................................51
while.................................................................................................51
iii
do... while.........................................................................................52
for.....................................................................................................52
foreach..............................................................................................53
QUEBRA DE FLUXO....................................................................................54
Break.................................................................................................54
Continue...........................................................................................54
10. FUNES.................................................................................................................56
DEFININDO FUNES..................................................................................56
VALOR DE RETORNO...................................................................................56
ARGUMENTOS...........................................................................................57
Passagem de parmetros por referncia..........................................57
Argumentos com valores pr-definidos (default).............................58
CONTEXTO...............................................................................................59
ESCOPO....................................................................................................59
FUNES VARIVEIS...................................................................................60
11. VARIVEIS E CONSTANTES..............................................................................62
CLASSE....................................................................................................69
OBJETO....................................................................................................69
A VARIVEL $THIS....................................................................................69
SUBCLASSES............................................................................................70
CONSTRUTORES.........................................................................................70
13. NOES DE SQL....................................................................................................72
INTRODUO.............................................................................................72
ESTRUTURA DAS TABELAS...........................................................................73
COMANDO CREATE....................................................................................73
Comando Drop.................................................................................73
Comando Alter..................................................................................74
MANIPULANDO DADOS DAS TABELAS.............................................................74
Comando SELECT............................................................................74
Comando INSERT............................................................................75
iv
Comando UPDATE..........................................................................75
Comando DELETE...........................................................................76
14. ACESSANDO O MYSQL VIA PHP.......................................................................78
ESTABELECENDO CONEXES........................................................................78
SELECIONANDO A BASE DE DADOS................................................................78
REALIZANDO CONSULTAS............................................................................79
Apagando o resultado.......................................................................79
Nmero de linhas..............................................................................79
Utilizando os resultados...................................................................80
Alterando o ponteiro de um resultado..............................................80
15. ACESSANDO O POSTGRESQL VIA PHP..........................................................82
ESTABELECENDO CONEXES........................................................................82
REALIZANDO CONSULTAS............................................................................82
Verificando o erro na execuo de uma query.................................83
Apagando o resultado.......................................................................83
Nmero de linhas..............................................................................83
Utilizando os resultados...................................................................83
16. UTILIZANDO HEADERS......................................................................................85
FUNO HEADERS_SENT..............................................................................85
O QUE SO...............................................................................................86
GRAVANDO COOKIES..................................................................................86
LENDO COOKIES GRAVADOS.........................................................................87
18. MANIPULANDO ARQUIVOS...............................................................................88
COPIANDO ARQUIVOS................................................................................88
VERIFICANDO O TAMANHO DE UM ARQUIVO...................................................88
VERIFICANDO SE UM ARQUIVO EXISTE...........................................................88
LIMPANDO O CACHE...................................................................................89
ABRINDO ARQUIVOS PARA LEITURA E/OU ESCRITA...........................................89
LENDO DE UM ARQUIVO..............................................................................91
ESCREVENDO EM UM ARQUIVO.....................................................................91
EXEMPLO.................................................................................................91
UPLOADS COM FORMULRIOS HTML..........................................................92
19. ENVIANDO E-MAIL...............................................................................................94
20. ALGUMAS FUNES TEIS...............................................................................95
CLASS_EXISTS E FUNCTION_EXISTS...............................................................95
DATE.......................................................................................................95
NUMBER_FORMAT......................................................................................96
SET_TIME_LIMIT........................................................................................96
21. BIBLIOGRAFIA E REFERNCIAS.....................................................................97
APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS.......................98
htmlspecialchars...............................................................................98
htmlentities.......................................................................................98
nl2br.................................................................................................98
get_meta_tags...................................................................................99
strip_tags..........................................................................................99
urlencode..........................................................................................99
urldecode........................................................................................100
FUNES RELACIONADAS A ARRAYS............................................................100
Implode e join.................................................................................100
split.................................................................................................100
explode............................................................................................101
COMPARAES ENTRE STRINGS..................................................................101
similar_text.....................................................................................101
strcasecmp......................................................................................101
strcmp.............................................................................................101
strstr................................................................................................102
stristr...............................................................................................102
strpos..............................................................................................102
strrpos.............................................................................................102
FUNES PARA EDIO DE STRINGS............................................................103
chop................................................................................................103
ltrim................................................................................................103
trim.................................................................................................103
strrev...............................................................................................103
strtolower........................................................................................104
strtoupper.......................................................................................104
ucfirst..............................................................................................104
ucwords...........................................................................................104
str_replace......................................................................................105
FUNES DIVERSAS..................................................................................105
chr...................................................................................................105
ord ..................................................................................................105
echo ................................................................................................105
print ...............................................................................................105
strlen ..............................................................................................105
APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS......................106
FUNES GENRICAS...............................................................................106
Array...............................................................................................106
range...............................................................................................106
shuffle.............................................................................................107
sizeof...............................................................................................107
FUNES DE NAVEGAO......................................................................107
reset................................................................................................107
end..................................................................................................107
next.................................................................................................108
prev.................................................................................................108
pos...................................................................................................108
key...................................................................................................108
each.................................................................................................108
FUNES DE ORDENAO..........................................................................109
vi
sort..................................................................................................109
rsort................................................................................................109
asort................................................................................................110
arsort..............................................................................................110
ksort................................................................................................110
usort................................................................................................110
uasort..............................................................................................110
uksort..............................................................................................111
APNDICE 03 TIPOS SUPORTADOS PELO MYSQL.......................................112
NUMRICOS............................................................................................112
DATA E HORA........................................................................................112
STRINGS.................................................................................................112
GNU FREE DOCUMENTATION LICENSE...........................................................114
0. PREAMBLE ..................................................................................114
1. APPLICABILITY AND DEFINITIONS ......................................114
2. VERBATIM COPYING ................................................................115
3. COPYING IN QUANTITY ...........................................................115
4. MODIFICATIONS ........................................................................116
5. COMBINING DOCUMENTS .......................................................117
6. COLLECTIONS OF DOCUMENTS ............................................118
7. AGGREGATION WITH INDEPENDENT WORKS ...................118
8. TRANSLATION ............................................................................118
vii
Notas do autor
Este documento foi criado inicialmente como parte do projeto de
concluso de curso da Universidade Federal de Sergipe, e distribudo gratuitamente
atravs da Internet.
Depois de terminado o projeto, recebi diversas sugestes sobre contedo a
incluir, e tambm passei a dar cursos de PHP em diversas instituies de Sergipe.
Diante disso, continuei a escrever o documento, sendo algumas incluses para atender
s sugestes e outras para utilizar nos cursos.
Como poder ser observado principalmente no captulo 05, o documento
no est concludo, e nem sei se algum dia estar, tendo em vista que o uso de PHP
cresce cada vez mais, e ainda falta muito a ser dito sobre ele aqui.
Se voc tem uma pgina com tutoriais, ou gostou deste documento e quer
public-lo em seu site, fique vontade para faz-lo. S peo duas coisas:
1. Me avise, informando a URL do site (s por curiosidade minha);
2. Lembre-se que o autor do documento sou eu. Apesar de ainda no ter
visto, j fui informado que h cpias piratas deste documento. Mas
quero lembrar que no preciso piratear algo completamente
GRATUITO.
Este documento pode ser encontrado nos seguintes sites:
http://www.tutoriais.com.br
http://www.lemon.com.br/canais/tutoriais/
http://www.cipsga.org.br/
O terceiro endereo o site do CIPSGA - Comit de Incentivo a Produo
do Software Gratuito e Alternativo, uma organizao no governamental que vem
realizando um grande trabalho no Brasil, buscando o desenvolvimento tecnolgico
atravs do software livre.
Se houver alguma informao incorreta, peo que me informem por email. Se tiverem dvidas sobre temas tratados aqui, ou at sobre os ainda no presentes
10
neste documento, entrem em contato comigo por e-mail. s vezes fico meio atarefado
no trabalho, e acabo ficando sem responder alguns e-mails. Pode insistir que no h
problema . Para obter a verso original do documento, voc pode pedir por e-mail, ou
visitar o site www.vivas.com.br.
Meu e-mail? mauricio@vivas.com.br ou mauricio@cipsga.org.br.
11
01. Introduo
12
Client-Side Scripts
So responsveis pelas aes executadas no browser, sem contato com o
servidor. Os exemplos mais comuns de aplicaes client-side so imagens e textos que
mudam com o passar do mouse.
Os scripts client-side so muito teis para fazer validaes de formulrios
sem utilizar processamento do servidor e sem provocar trfego na rede. Outra utilizao
comum na construo de interfaces dinmicas e leves.
Server-Side Scripts
Os scripts server-side so responsveis pela criao de pginas em tempo
real. Num mecanismo de busca, por exemplo, seria invivel manter um arquivo para
cada consulta a ser realizada. O que existe um modelo da pgina de resposta, que
mesclado com os dados no momento em que a pgina requisitada.
O cliente (navegador) no capaz de diferenciar pginas estticas de
pginas dinmicas, a no ser que o script gerador da pgina dinmica envie alguma
informao desse tipo.
13
O que PHP?
14
Basicamente, qualquer coisa que pode ser feita por algum programa CGI
pode ser feita tambm com PHP, como coletar dados de um formulrio, gerar pginas
dinamicamente ou enviar e receber cookies.
PHP tambm tem como uma das caractersticas mais importantes o
suporte a um grande nmero de bancos de dados, como dBase, Interbase, MS-SQL
Server, mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Construir uma pgina
baseada em um banco de dados torna-se uma tarefa extremamente simples com PHP.
Alm disso, PHP tem suporte a outros servios atravs de protocolos
como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir
sockets e interagir com outros protocolos.
15
16
Devemos notar que a requisio GET inicia com a palavra GET, inclui o
documento solicitado e encerra com a combinao dos caracteres carriage return e line
feed.
Para um melhor entendimento, voc pode fazer uma requisio GET
conectando diretamente em algum servidor WEB, conectando atravs de um programa
de telnet (geralmente o servidor http utiliza a porta 80). A resposta ser o cdigo da
pgina solicitada.
telnet www.guia-aju.com.br 80
Trying 200.241.59.16...
Connected to www.guia-aju.com.br.
Escape character is '^]'.
GET /index.php3
(... pgina solicitada ...)
Connection closed by foreign host.
17
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.
18
O mtodo POST
Atravs da utilizao de headers possvel enviar os parmetros da URL
solicitada sem expor esses dados ao usurio, e tambm sem haver um limite de
tamanho.
Uma conexo ao servidor HTTP utilizando o mtodo POST seria algo
semelhante ao que segue:
telnet www.guia-aju.com.br 80
Trying 200.241.59.16...
Connected to www.guia-aju.com.br.
Escape character is '^]'.
POST /index.php3
Accept */*
Content-type: application/x-www-form-urlencoded
Content-length:22
id=0024horas&tipo=Taxi
(... pgina solicitada ...)
Connection closed by foreign host.
19
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:
<form name= action= method= enctype=>
Onde temos:
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
A tag <input>
Muitos elementos de um formulrio html so definidos pela tag
<input>. Cada tipo de elemento possui parmetros prprios, mas todos possuem pelo
20
menos dois parmetros em comum: type, que define o tipo de elemento, e name, que
como j foi dito define o nome daquele elemento.
Campo de Texto
21
Checkbox
<input type="checkbox" name="" value="" checked>
Radio Button
<input type="radio" name="" value="" checked>
Submit Button
<input type="submit" name="" value="">
22
Parmetros:
Value o texto que aparecer no corpo do boto.
Reset Button
<input type="reset" name="" value="">
Button
<input type="button" name="" value="">
TextArea
<textarea cols="" rows="" name="" wrap="">texto</textarea>
Select
<select name="" size="" multiple>
<option value="">texto</option>
</select>
Upload de arquivos
<input type="file" name="" size="">
24
25
como no exemplo:
DocumentRoot "C:\vivas\"
Feito isso, crie um arquivo com um dos nomes definidos como ndice e
coloque no diretrio definido como root. Execute o servidor Apache e tente acessar o
endereo http://localhost pelo browser. Se a pgina for exibida, porque o servidor
foi instalado corretamente.
26
PHP
O PHP pode ser conseguido em www.php.net, e sua instalao tambm
simples. Atualmente existem duas opes de download: a primeira no formato
padro de instaladores do Windows, e neste caso no necessrio explicar, j que o
padro citado bastante simples. Para quem gosta de sujar as mos, existe a opo
de download dos arquivos em formato zip, que necessitam de configurao manual.
Veremos a seguir os passos necessrios para isso:
Descompactar os arquivos para algum diretrio (no nosso exemplo,
c:\php)
Renomear o arquivo de configurao. O arquivo php.ini-dist deve
ser renomeado (ou copiado) para php.ini. Depois disso, o arquivo pode ser editado,
bastando modificar a linha extension_dir, que deve conter o diretrio onde esto os
mdulos (c:\php). Veja o exemplo:
extension_dir
c:\php
27
Acessando
pgina
atravs
do
servidor
mySQL
O
banco
de
dados
mySQL
pode
ser
conseguido
em
INDEX
SELECT
CREATE
INSERT
SHUTDOWN
DELETE
PROCESS
UPDATE
DROP
REFERENCES
USAGE
28
29
30
Separador de instrues
31
Nomes de variveis
Toda varivel em PHP tem seu nome composto pelo caracter $ e uma
string, que deve iniciar por uma letra ou o caracter _. PHP case sensitive, ou seja,
as variveis $vivas e $VIVAS so diferentes. Por isso preciso ter muito cuidado ao
definir os nomes das variveis. bom evitar os nomes em maisculas, pois como
veremos mais adiante, o PHP j possui alguma variveis pr-definidas cujos nomes so
formados por letras maisculas.
Comentrios
32
Exemplos:
<?
33
Ao
acessar
arquivo
atravs
do
servidor
Apache
34
07. Tipos
Tipos Suportados
35
Strings
36
Significado
\n
\r
\t
\\
\$
\
\
Nova linha
Retorno de carro (semelhante a \n)
Tabulao horizontal
A prpria barra ( \ )
O smbolo $
Aspa simples
Aspa dupla
Arrays
37
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:
Exemplo:
list($a, $b, $c) = array(a, b, c);
==
==
==
==
null
um
dois
tres
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();
Booleanos
Transformao de tipos
convertido para float, seno, se um deles for integer, o outro ser convertido para
integer.
Exemplo:
$vivas =
$vivas =
$vivas =
$vivas =
1;
// $vivas a string 1
$vivas + 1; // $vivas o integer 2
$vivas + 3.7;// $vivas o double 5.7
1 + 1.5
// $vivas o double 2.5
nmeros o seguinte:
-
Exemplos:
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
$vivas = 1
+
+
+
+
+
+
10.5;
//
-1.3e3;
//
teste10.5; //
10testes; //
" 10testes";
"+ 10testes";
$vivas == 11.5
$vivas == -1299
$vivas == 1
$vivas == 11
// $vivas == 11
// $vivas == 1
40
//
//
//
//
(array)
(object)
// $vivas integer
// $vivas double
41
08. Operadores
Aritmticos
adio
subtrao
multiplicao
diviso
mdulo
de strings
concatenao
bit a bit
e lgico
ou lgico
ou exclusivo
no (inverso)
shift left
shift right
de atribuio
42
atribuio simples
atribuio com adio
atribuio com subtrao
atribuio com multiplicao
atribuio com diviso
atribuio com mdulo
atribuio com concatenao
atribuio com e lgico
atribuio com ou lgico
atribuio com ou exclusivo
atribuio com shift left
atribuio com shift right
Exemplo:
$a = 7;
$a += 2; // $a passa a conter o valor 9
Lgicos
Utilizados para inteiros representando valores booleanos
and
or
xor
!
&&
||
e lgico
ou lgico
ou exclusivo
no (inverso)
e lgico
ou lgico
Comparao
43
Expresso condicional
de incremento e decremento
++
--
incremento
decremento
44
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
de erro
PHP suporta um operador para controlar erros:
@
ordem de precedncia
Operadores
,
Or
Xor
And
Print
= += -= *= /= .= %= &= |= ^= ~= <<= >>=
?:
45
Ordem
08
09
10
11
12
13
14
15
16
17
18
19
20
Operadores
||
&&
|
^
&
== != === !==
< <= > >=
<< >>
+-.
*/%
! ~ ++ -- (int) (double) (string) (array) (object) @
[
new
46
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
Comandos de seleo
Tambm chamados de condicionais, os comandos de seleo permitem
executar comandos ou blocos de comandos com base em testes feitos durante a
execuo.
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:
47
if (expresso)
comando;
if (expresso):
comando;
. . .
comando;
endif;
if (expressao1)
comando1;
else
if (expressao2)
comando2;
else
if (expressao3)
comando3;
else
comando4;
49
switch
if ($i == 0)
print i
elseif ($i ==
print i
elseif ($i ==
print i
igual a zero;
1)
igual a um;
2)
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;
}
50
case 2:
print i igual a dois;
switch ($s) {
case casa:
print A casa amarela;
case arvore:
print a rvore bonita;
case lampada:
print joao apagou a lampada;
comandos de repetio
while
O while o comando de repetio (lao) mais simples. Ele testa uma
condio e executa um comando, ou um bloco de comandos, at que a condio testada
seja falsa. Assim como o if, o while tambm possui duas sintaxes alternativas:
while (<expressao>)
<comando>;
while (<expressao>):
<comando>;
. . .
<comando>;
endwhile;
51
do... while
$i = 0;
do {
print ++$i;
} while ($i < 10);
for
52
for (<inicializacao>;<condicao>;<incremento>)
<comando>;
for (<inicializacao>;<condicao>;<incremento>) :
<comando>;
. . .
<comando>;
endfor;
foreach
Na verso 4 do PHP foi includo mais um comando de repetio, utilizado
para percorrer os elementos de um array. Sua sintaxe :
foreach(array as $valor) expressao
foreach(array as $chave => $valor) expressao
53
Quebra de fluxo
Break
O comando break pode ser utilizado em laos de do, for e while,
alm do uso j visto no comando switch. Ao encontrar um break dentro de um
desses laos, o interpretador PHP para imediatamente a execuo do lao, seguindo
normalmente o fluxo do script.
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.
Continue
54
55
10. Funes
Definindo funes
Valor de retorno
56
Argumentos
57
/*
Aqui
as
duas
variveis
tero
seus
58
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.
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() {
echo $vivas;
}
Teste();
59
Exemplo:
$vivas = Testando;
function Teste() {
global $vivas;
echo $vivas;
}
Teste();
Funes variveis
PHP suporta o conceito de funes variveis. Isso significa que se uma
varivel tiver parnteses ao final, a funo cujo nome for o valor da varivel ser
executada, se existir. Vejamos o exemplo:
function soma($a, $b) {
return $a + $b;
}
function multiplica($a, $b) {
return $a * $b;
}
function dobro($a) {
return 2 * $a;
}
$func = 'soma';
echo $func(4,5) . "<br>\n";
$func = 'multiplica';
echo $func(4,5) . "<br>\n";
$func = 'dobro';
echo $func(4) . "<br>\n";
60
61
Uma varivel esttica visvel num escopo local, mas ela inicializada
apenas uma vez e seu valor no perdido quando a execuo do script deixa esse
escopo. Veja o seguinte exemplo:
function Teste() {
$a = 0;
echo $a;
$a++;
}
Exemplo:
function Teste() {
echo "$a";
static $a = 0;
$a++;
}
Variveis Variveis
Para interagir com a navegao feita pelo usurio, necessrio que o PHP
possa enviar e receber informaes para o software de navegao. A maneira de enviar
informaes, como j foi visto anteriormente, geralmente atravs de um comando de
impresso, como o echo. Para receber informaes vindas do navegador atravs de um
link ou um formulrio html o PHP utiliza as informaes enviadas atravs da URL. Por
exemplo: se seu script php est localizado em http://localhost/teste.php3 e
voc o chama com a url http://localhost/teste.php3?vivas=teste,
automaticamente o PHP criar uma varivel com o nome $vivas contendo a string
63
URLencode
Utilizando arrays
Cada elemento de um formulrio HTML submetido a um script PHP cria
no ambiente do mesmo uma varivel cujo nome o mesmo nome do elemento. Por
exemplo: um campo definido como:
<input type=text name=endereco>
ao ser submetido a um script PHP far com que seja criada uma varivel
com o nome $endereco. Isto acontece de forma semelhante para cookies, como
veremos mais adiante.
64
type="checkbox"
type="checkbox"
type="checkbox"
type="checkbox"
type="checkbox"
name="teste[]"
name="teste[]"
name="teste[]"
name="teste[]"
name="teste[]"
value="valor1">opcao1
value="valor2">opcao2
value="valor3">opcao3
value="valor4">opcao4
value="valor5">opcao5
Variveis de ambiente
65
A palavra mixed indica que a varivel var pode ser de diversos tipos.
A funo gettype pode retornar as seguintes strings: integer,
double, string, array, object e unknown type.
So as funes is_int,
is_integer,
is_real,
is_long,
varivel, ser criada uma nova varivel de mesmo nome e de contedo vazio, a no ser
que a chamada seja pela funo isset. Se a operao for bem sucedida, retorna true.
Existem dois tipos de teste que podem ser feitos para verificar se uma
varivel est setada: com a funo isset e com a funo empty.
A funo isset
E retorna true se a varivel estiver setada (ainda que com uma string
vazia ou o valor zero), e false em caso contrrio.
A funo empty
67
Definindo constantes
68
Classe
Uma classe um conjunto de variveis e funes relacionadas a essas
variveis. Uma vantagem da utilizao de programao orientada a objetos poder
usufruir do recurso de encapsulamento de informao. Com o encapsulamento o usurio
de uma classe no precisa saber como ela implementada, bastando para a utilizao
conhecer a interface, ou seja, as funes disponveis. Uma classe um tipo, e portanto
no pode ser atribuda a uma varivel. Para definir uma classe, deve-se utilizar a
seguinte sintaxe:
class Nome_da_classe {
var $variavel1;
var $variavel2;
function funcao1 ($parametro) {
/* === corpo da funo === */
}
}
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 = new $nome_da_classe;
Para
utilizar
as
A varivel $this
Na definio de uma classe, pode-se utilizar a varivel $this, que o
prprio objeto. Assim, quando uma classe instanciada em um objeto, e uma funo
desse objeto na definio da classe utiliza a varivel $this, essa varivel significa o
objeto que estamos utilizando.
69
$minhaconta->credito(50);
$minhaconta->saldo(); // retorna 50
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;
}
}
70
class conta {
var $saldo;
function conta () {
$this.saldo = 0;
}
function saldo() {
return $this->saldo;
}
function credito($valor) {
$this->saldo += $valor;
}
}
71
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.
72
Comando Create
Este comando permite a criao de tabelas no banco de dados ou mesmo a
criao do banco.
Sintaxe:
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), ... ).
Comando Drop
Este comando elimina a definio da tabela, seus dados e referncias.
Sintaxe:
DROP TABLE
73
Comando Alter
Este comando permite inserir/eliminar atributos nas tabelas j existentes.
Comando:
ALTER TABLE < nome_tabela >
nome_atributo1 < tipo >
nome_atributoN < tipo >
) ;
ADD / DROP (
[ NOT NULL ],
[ NOT NULL ]
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:
SELECT cidade, estado from brasil where populacao > 100000;
74
Comando INSERT
Adiciona um ou vrios registros a uma tabela. Isto referido como
consulta anexao.
Sintaxe bsica
INSERT INTO destino [(campo1[, campo2[, ...]])]
VALUES (valor1[, valor2[, ...])
Comando UPDATE
Cria uma consulta atualizao que altera os valores dos campos em uma
tabela especificada com base em critrios especficos.
Sintaxe:
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.
75
Comando DELETE
Remove registros de uma ou mais tabelas listadas na clusula FROM que
satisfaz a clusula WHERE.
Sintaxe
DELETE [tabela.*]
FROM tabela
WHERE critrio
onde:
tabela.* - O nome opcional da tabela da qual os registros so excludos.
tabela - O nome da tabela da qual os registros so excludos.
critrio - Uma expresso que determina qual registro deve ser excludo.
DELETE especialmente til quando voc quer excluir muitos registros.
Para eliminar uma tabela inteira do banco de dados, voc pode usar o mtodo Execute
com uma instruo DROP.
Entretanto, se voc eliminar a tabela, a estrutura perdida. Por outro lado,
quando voc usa DELETE, apenas os dados so excludos. A estrutura da tabela e todas
as propriedades da tabela, como atributos de campo e ndices, permanecem intactos.
Voc pode usar DELETE para remover registros de tabelas que esto em
uma relao um por vrios com outras tabelas. Operaes de excluso em cascata fazem
com que os registros das tabelas que esto no lado "vrios" da relao sejam excludos
quando os registros correspondentes do lado "um" da relao so excludos na consulta.
Por exemplo, nas relaes entre as tabelas Clientes e Pedidos, a tabela Clientes est do
lado "um" e a tabela Pedidos est no lado "vrios" da relao. Excluir um registro em
Clientes faz com que os registros correspondentes em Pedidos sejam excludos se a
opo de excluso em cascata for especificada.
76
77
78
Realizando consultas
Para executar consultas SQL no mySQL, utiliza-se o comando
mysql_query, que tem a seguinte assinatura:
Nmero de linhas
int mysql_num_rows(int result);
79
Utilizando os resultados
Existem diversas maneiras de ler os resultados de uma query SELECT.
As mais comuns sero vistas a seguir:
int mysql_result(int result, int linha, mixed [campo] );
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);
80
alterar a posio indicada por esse ponteiro deve ser utilizada a funo
mysql_data_seek, sendo que o nmero da primeira linha de um resultado zero.
81
IMPORTANTE:
comando
pg_close
no
encerra
conexes
tty=tty
Realizando consultas
Para executar consultas SQL no Postgres, utiliza-se o comando pg_exec,
que tem a seguinte assinatura:
int pg_exec(int conexao, string query );
qual a base de dados selecionada, basta utilizar a funo string pg_dbname, que tem a
seguinte assinatura:
string pg_dbname(int conexo);
Apagando o resultado
int pg_freeresult(int result);
Nmero de linhas
int pg_numrows(int result);
Utilizando os resultados
Existem diversas maneiras de ler os resultados de uma query SELECT.
As mais comuns sero vistas a seguir:
83
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:
array pg_fetch_array(int result, int linha);
84
Para obter uma lista completa dos headers HTTP, visite o seguinte
endereo:
http://www.w3.org/Protocols/rfc2068/rfc2068
funo headers_sent
boolean headers_sent (void);
85
Gravando cookies
Para gravar cookies no cliente, deve ser utilizada a funo setcookie, que
possui a seguinte assinatura:
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;
86
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.
pgina
anterior
pelo
$HTTP_COOKIE_VARS[teste]
ou pela varivel
$teste
87
A funo filesize pode ser bastante til na criao de um script que liste o
contedo de um diretrio, mas tambm utilizada em casos como a funo fread, que
ser vista mais adiante.
int filesize(string arquivo);
88
Limpando o cache
Para ler ou escrever num arquivo preciso antes de qualquer coisa abrilo. Para isso deve ser utilizada a funo fopen, como visto a seguir:
int fopen(string arquivo, string modo, int [use_include_path]);
r
r+
w
89
w+
a
a+
posio a partir de onde os dados sero lidos e/ou gravados. Para alterar a posio desse
ponteiro, pode-se utilizar a funo fseek:
int fseek(int fp, int posio);
90
Lendo de um arquivo
string fread(int fp, int tamanho);
Escrevendo em um arquivo
int fwrite(int fp, string conteudo, int [tamanho]);
Exemplo
91
nome teste:
<?
$id = fopen($teste, r); /* abre o arquivo para leitura */
92
93
onde:
to string contendo o e-mail do destinatrio;
subject assunto da mensagem;
message o corpo da mensagem.
headers outras informaes de cabealho, como por exemplo from,
reply-to, bcc, etc.
Para facilitar a compreenso dos scripts, os argumentos (como geralmente
so strings grandes) devem ser atribudos a variveis antes da chamada da funo mail.
94
Class_exists e function_exists
bool class_exists (string nome);
int function_exists (string nome);
Date
string date (string formato [, int timestamp]);
Esta funo serve para formatar uma data. O segundo argumento deve
estar no formato timestamp, que representa o nmero de segundos desde 01/01/1970. A
string formato dever conter caracteres que sero substitudos por partes da data
formatada. Alguns dos caracteres que podem ser usados so:
a
d
h
H
i
L
m
s
t
w
Y
y
z
"am" ou "pm"
dia do ms, sempre com 2 dgitos: "01" a "31"
hora, formato de 12 horas "01" a "12"
hora, formato de 24 horas "00" a "23"
minutos, sempre com 2 dgitos: "00" a "59"
boolean indicando se o ano bissexto: "0" ou "1"
ms, sempre com 2 dgitos: "01" a "12"
segundos, sempre com 2 dgitos: "00" a "59"
nmero de dias do ms: "28" a "31"
dia da semana: "0" (Domingo) a "6" (Sbado)
ano com 4 dgitos: "1999"
ano com 2 dgitos: "99"
dia do ano: "0" a "365"
Exemplo:
echo date(d/m/Y H:i:s); // imprime 01/01/2001 13:15
95
number_format
string
number_format(float
numero,
ponto_decimal, string pomto_mil);
int
decimais,
string
set_time_limit
void set_time_limit (int seconds)
96
97
htmlentities
string htmlentities(string str);
para 'º'
para 'ª'
para 'á'
para ç'
nl2br
string nl2br(string str);
98
get_meta_tags
array get_meta_tags(string arquivo);
strip_tags
string strip_tags(string str);
urlencode
string urlencode(string str);
99
urldecode
string urldecode(string str);
Implode e join
string implode(string separador, array partes);
string join(string separador, array partes);
split
array split(string padrao, string str, int [limite]);
10
explode
array explode(string padrao, string str);
str1,
string
str2,
double
strcasecmp
int strcasecmp(string str1, string str2);
strcmp
int strcasecmp(string str1, string str2);
10
strstr
string strstr(string str1, string str2);
string strchr(string str1, string str2);
stristr
string strstr(string str1, string str2);
strpos
int strpos(string str1, string str2, int [offset] );
strrpos
int strrpos(string haystack, char needle);
10
chop
string chop(string str);
\n
\n
); // retorna
Teste
ltrim
string ltrim(string str);
Teste
\n
\n ); // retorna Teste
\n
\n
trim
string trim(string str);
\n
\n ); // retorna Teste
strrev
string strrev(string str);
10
strtolower
string strtolower(string str);
strtoupper
string strtoupper(string str);
ucfirst
string ucfirst(string str);
ucwords
string ucwords(string str);
10
str_replace
str3);
string
str_replace(string
str1,
string
str2,
string
Funes diversas
chr
string chr(int ascii);
ord
int ord(string string);
echo
echo(string arg1, string [argn]... );
print
print(string arg);
Funes Genricas
Array
array array(...);
array("um",
range
array range(int minimo, int maximo);
10
shuffle
void shuffle(array &arr);
sizeof
int sizeof(array arr);
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);
next
mixed next(array arr);
prev
mixed prev(array arr);
pos
mixed pos(array arr);
key
mixed key(array arr);
10
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);
rsort
void rsort(array &arr);
10
asort
void asort(array &arr);
arsort
void arsort(array &arr);
ksort
void ksort(array &arr);
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);
11
uksort
void uksort(array &arr, function compara);
11
Numricos
Nome do tipo
TINYINT
SMALLINT
MEDIUMINT
INT
INTEGER
BIGINT
FLOAT(X)
FLOAT
DOUBLE
DOUBLE PRECISION
REAL
DECIMAL(M,D)
NUMERIC(M,D)
Espao utilizado
1 byte
2 bytes
3 bytes
4 bytes
4 bytes
8 bytes
4 if X <= 24 or 8 if 25 <= X <= 53
4 bytes
8 bytes
8 bytes
8 bytes
M bytes (D+2, if M < D)
M bytes (D+2, if M < D)
Data e Hora
Nome do tipo
DATE
DATETIME
TIMESTAMP
TIME
YEAR
Espao utilizado
3 bytes
8 bytes
4 bytes
3 bytes
1 byte
Strings
Nome do tipo
CHAR(M)
VARCHAR(M)
TINYBLOB, TINYTEXT
BLOB, TEXT
MEDIUMBLOB,
Espao utilizado
M bytes, 1 <= M <= 255
L+1 bytes, onde L <= M e 1 <= M <= 255
L+1 bytes, onde L < 2^8
L+2 bytes, onde L < 2^16
11
ue2',...)
SET('value1','valu
e2',...)
1, 2, 3, 4 ou 8 bytes
11
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other written
document "free" in the sense of freedom: to assure everyone the effective freedom
to copy and redistribute it, with or without modifying it, either commercially or
noncommercially. Secondarily, this License preserves for the author and publisher a
way to get credit for their work, while not being considered responsible for
modifications made by others.
This License is a kind of "copyleft", which means that derivative works of the
document must themselves be free in the same sense. It complements the GNU
General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software,
because free
software needs free documentation: a free program should come with manuals
providing the same freedoms that the software does. But this License is not limited
to software manuals; it can be used for any textual work, regardless of subject
matter or whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
11
Back-Cover Texts, in the notice that says that the Document is released under this
License.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the general public,
whose contents can be viewed and edited directly and straightforwardly with
generic text editors or (for images composed of pixels) generic paint programs or
(for drawings) some widely available drawing editor, and that is suitable for input to
text formatters or for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file format whose
markup has been designed 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
11
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:
A.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.
B.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).
C.State on the Title page the name of the publisher of the Modified Version, as the
publisher.
D.Preserve all the copyright notices of the Document.
E.Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.
F.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.
G.Preserve in that license notice the full lists of Invariant Sections and required
Cover Texts given in the Document's license notice.
H.Include an unaltered copy of this License.
I.Preserve the section entitled "History", and its title, and add to it an item stating at
11
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.
J.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.
K.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.
L.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.
M.Delete any section entitled "Endorsements". Such a section may not be included
in the Modified Version.
N.N. Do not retitle any existing section as "Endorsements" or to conflict in title with
any Invariant Section.
O.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.
11
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.
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.
11
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.
11