Escolar Documentos
Profissional Documentos
Cultura Documentos
PHP5 PDF
PHP5 PDF
ndice
O que PHP?.................................................................................................................... 6
Client Side scripts............................................................................................................. 6
Server Side scripts ............................................................................................................ 6
Ambiente de desenvolvimento de pginas PHP ............................................................... 7
O que pode ser feito com PHP?........................................................................................ 7
Como surgiu a linguagem PHP?....................................................................................... 8
A sintaxe ........................................................................................................................... 8
Delimitando o cdigo PHP ............................................................................................... 9
Alternagem avanada ....................................................................................................... 9
Separador de instrues .................................................................................................. 10
Comentrios.................................................................................................................... 10
Variveis......................................................................................................................... 11
Regras para nomear as variveis .................................................................................... 11
Variveis Predefinidas.................................................................................................... 11
Variveis do servidor: $_SERVER ................................................................................ 12
Usando strings de consulta ............................................................................................. 15
Variveis HTTP GET: $_GET ....................................................................................... 16
Transmitindo diversas variveis de string de consulta ................................................... 16
Variveis da requisio: $_REQUEST........................................................................... 17
Transmitindo caracteres especiais em uma string de consulta ....................................... 17
Array Associativo de recebimento de formulrio........................................................... 19
Cotas mgicas no PHP.................................................................................................... 21
stripslashes( ) .................................................................................................................. 21
addslashes( ) ................................................................................................................... 21
Usando objetos de aplicao e sesso............................................................................. 22
Usando cookies para monitorar os clientes .................................................................... 22
Usando variveis de sesso para controlar clientes ........................................................ 24
Tipos ............................................................................................................................... 26
Heredoc em Strings ........................................................................................................ 27
Interpretao de variveis............................................................................................... 28
Coero de tipo............................................................................................................... 29
Constantes....................................................................................................................... 30
Operadores...................................................................................................................... 31
Operadores Aritmticos.................................................................................................. 31
Operadores de Atribuio............................................................................................... 31
Operadores de Comparao............................................................................................ 32
Operadores de controle de erro....................................................................................... 34
Operadores de Incremento/Decremento ......................................................................... 34
Operadores Lgicos........................................................................................................ 35
Operadores de String ...................................................................................................... 35
Operadores de Arrays ..................................................................................................... 35
Estruturas de Controle .................................................................................................... 36
Estruturas Condicionais.................................................................................................. 36
if...................................................................................................................................... 36
else .................................................................................................................................. 37
elseif ............................................................................................................................... 37
Tambm foi providenciada uma abstrao de banco de dados DBX permitindo a voc
utilizar qualquer banco de dados transparentemente com sua extenso. Adicionalmente,
A sintaxe
Quando o PHP interpreta um arquivo, ele simplesmente repassa o texto do arquivo at
encontrar uma das tags especiais que lhe diz para comear a interpretar o texto como
cdigo PHP. O interpretador ento executa todo o cdigo que encontra, at chegar em
uma tag de fechamento PHP, que novamente o coloca simplesmente repassando texto
novamente. Este o mecanismo que permite a incluso de cdigo PHP dentro do
Alternagem avanada
<?php
if ($expressao) {
?>
<strong>Isso verdadeiro.</strong>
<?php
} else {
?>
<strong>Isto falso.</strong>
<?php
}
?>
Separador de instrues
Instrues so separadas da mesma forma que o C ou o Perl - cada instruo termina
com um ponto e vrgula.
A tag de fechamento (?>) tambm implica no fim de uma instruo, ento os exemplos
seguintes so equivalentes:
<?php
echo "Isto um exemplo com vrgula";
?>
<?php echo "Isto um outro exemplo sem vrgula" ?>
Comentrios
O PHP suporta comentrios do 'C', 'C++' e Unix shell. Por exemplo:
<?php
echo "Isto um exemplo"; //Comentrio de uma linha como no
C++
/* Isto um comentrio de mais de uma linha
e aqui temos outra linha como em C */
echo "Isto um outro exemplo";
echo "O ltimo exemplo"; #Comentrio no estilo Unix shell
?>
O comentrio de uma linha s tem efeito at o fim da linha ou fim do bloco de cdigo
PHP atual, o que ocorrer primeiro.
<h1>Isto um <?php # echo " simples";?> exemplo.</h1>
<p>No ttulo acima voc ler 'Isto um exemplo'.
Voc precisa ser cuidadoso com comentrios estilo 'C' encadeados, pois eles podem
causar problemas em grandes blocos.
<?php
/*
echo "Isto um teste"; /* Este comentrio causar um erro
*/
*/
?>
10
Variveis
So cdigos em forma de palavras que carregam informaes que se alteram variam
no decorrer de uma instruo. As variveis so muito teis, pois elas permitem uma
flexibilidade na programao, onde no so possveis de antever determinadas
situaes.
Variveis Predefinidas
O PHP oferece um grande nmero de variveis predefinidas para qualquer script que ele
execute. Muitas destas variveis, entretanto, no podem ser completamente
documentadas uma vez dependem de diversos fatores, como o servidor no qual scripts
so executados, a verso e configurao deste servidor e outros.
11
'SERVER_NAME'
O nome host do servidor onde o script atual executado. Se o script est rodando em
um host virtual, este ser o valor definido para aquele host virtual.
<?php
echo $_SERVER['SERVER_NAME'];
?>
server_name.php
'SERVER_SOFTWARE'
A string de identificao do servidor, fornecida nos headers quando respondendo a
requests.
<?php
echo $_SERVER['SERVER_SOFTWARE'];
?>
server_software.php
'SERVER_PROTOCOL'
12
'REQUEST_METHOD'
Contm o mtodo de request utilizando para acessar a pgina. Geralmente GET,
HEAD, POST ou PUT.
Com o exemplo abaixo, voc ter o retorno do mtodo de request GET, isso porque
voc s est acessando a pgina, e os dados no vieram de um formulrio com mtodo
POST.
<?php
echo $_SERVER['REQUEST_METHOD'];
?>
request_method.php
'QUERY_STRING'
A query string (string de solicitao), se houver, pela qual a pgina foi acessada. Para a
demonstrao do exemplo, a seguir, voc ira criar duas pginas:
<html>
<head><title>Exemplo de variveis de servidor</title></head>
<body>
<a href="query_string.php?empresa=integrator">Vai at a pgina
de query_string.php</a>
</body>
</html>
env_query_string.php
<?php
echo $_SERVER['QUERY_STRING'];
?>
query_string.php
13
'HTTP_ACCEPT_LANGUAGE'
O contedo do header Accept-Language: da requisio atual, se houver. Exemplo pt-br.
<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
?>
http_accept_language.php
'HTTP_USER_AGENT'
O contedo do header User_Agent: da requisio atual, se houver. uma string
denotando o agente de usurio pelo qual a pgina acessada. Um exemplo tpico :
Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) ou Mozilla/4.0 (compatible; MSIE 5.01;
Windows NT 5.0).
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
http_user_agent.php
'REMOTE_ADDR'
O endereo IP de onde o usurio est visualizado a pgina atual.
<?php
echo $_SERVER['REMOTE_ADDR'];
?>
remote_addr.php
Alm de outras coisas, o usurio pode ser bloqueado ou voc pode criar um contador
personalizado.
'SCRIPT_FILENAME'
O caminho absoluto o script atualmente em execuo.
<?php
echo $_SERVER['SCRIPT_FILENAME'];
?>
script_filename.php
'PATH_TRANSLATED'
O caminho real do script relativo ao sistema de arquivos (no o document root), depois
realizou todos os mapeamentos de caminhos (virtual-to-real). semelhante ao
SCRIPT_FILENAME.
14
'SCRIPT_NAME'
Contm o caminho completo do script atual. til para pginas que precisam apontar
para elas mesmas (dinamicamente). Semelhante ao PHP_SELF.
<?php
echo $_SERVER['SCRIPT_NAME'];
?>
script_name.php
<HTML>
<HEAD><TITLE>Mas</TITLE></HEAD>
<BODY>
Pro favor, escolha o tipo de ma:
<P><A HREF="string_cons_recebe.php?maca=vermelha">Vermelhas
deliciosas</A>
<P><A HREF="recebe_string_cons.php?maca=verde">Verdes
maravilhosas</A>
</BODY>
</HTML>
env_string_cons.php
No exemplo acima, vemos dois links de hipertexto para uma pgina denominada
recebe_string_cons.php. O primeiro link transmite a string de consulta maca que
contm o valor vermelha. A segunda string de consulta, tambm denominado maca,
tm o valor de verde.
Dentro da pgina recebe_string_cons.php, voc pode determinar o link escolhido pelo
15
env_divs_str_cons.php
16
<HTML>
<HEAD><TITLE>Transmitindo caracteres especiais</TITLE></HEAD>
17
Esta pgina contm um link de hipertexto com uma varivel de string de consulta
denominada fruta. Entretanto, ao clicar sobre esse link, o valor da string de consulta
no ser transmitido corretamente para a pgina receb_caract_esp.php em navegadores
antigos. O valor da string de consulta ser truncado (retirado) no primeiro espao.
Antes de transmitir uma string de consulta que contm caracteres especiais ou espaos,
voc deve codificar como URL na string de consulta. Quando a string codificada,
possveis caracteres problemticos sero substitudos.
No exemplo a seguir veja a transmisso sendo codificada para ser enviada:
<html>
<head><title> Transmitindo caracteres especiais</title></head>
<body>
<?php
$string=urlencode("Laranja Lima");
?>
<A HREF="receb_caract_esp.php?fruta=<?php echo $string?>">
Laranja Lima
</A>
</body>
</html>
trans_caract_esp_cod.php
Um outro exemplo clssico ocorre quando as strings sero passadas em uma consulta. O
usurio pode querer digitar caracteres especiais que causam problemas quando so
tratados de maneira comum na URL. Como o caso do & e comercial. Veja abaixo o
exemplo sem e com a codificao:
<html>
<head><title> Transmitindo caracteres especiais</title></head>
<body>
<?php $string="Flambers&Noble Ltda."; ?>
<A HREF="receb_caract_esp_novo.php?empresa=
<?php echo $string?>">A empresa do momento</A>
</body>
</html>
trans_caract_esp_novo.php
<HTML>
<HEAD><TITLE>Transmitindo caracteres especiais</TITLE></HEAD>
<BODY>
<?php
echo $_GET["empresa"];
?>
</BODY>
18
No exemplo acima, voc nota nitidamente que parte dos caracteres no foram recebidos.
Isso demonstra que importante o uso do mtodo urlencode( ).
1. <html>
2. <head><title> Transmitindo caracteres especiais
</title></head>
3. <body>
4. <?php
5. $string=urlencode("Flambers&Noble Ltda.");
6. ?>
7. <A HREF="receb_caract_esp_novo.php?empresa=
8.
<?php echo $string?>">A empresa do momento</A>
9. </body>
10.
</html>
trans_caract_esp_dec_novo.php
<HTML><HEAD>
<TITLE>Recebendo dados via formulrio pelo mtodo
POST</TITLE></HEAD>
<BODY>
<?php
echo $HTTP_POST_VARS["nome"];
?>
</BODY>
</HTML>
receb_met_post.php
19
Usando o mtodo GET voc tem a mesma funcionalidade dos envios criados por strings
diretas nos links:
<html>
<head><title>Usando Array Associativo pelo mtodo
GET</title></head>
<body>
<FORM METHOD="GET" ACTION="receb_met_get.php">
Seu nome: <INPUT TYPE="TEXT" NAME="nome" /><BR />
<INPUT TYPE="SUBMIT" VALUE="Enviar"/>
</FORM>
</body>
</html>
env_met_get.php
<HTML>
<HEAD><TITLE>Recebendo dados via formulrio pelo mtodo
GET</TITLE></HEAD>
<BODY>
<?php
echo $_GET["nome"];
?>
</BODY>
</HTML>
receb_met_get.php
20
<html>
<head><title>Usando caracteres de escape</title></head>
<body>
<FORM METHOD="POST" ACTION="receb_met_post_esc.php">
Dados: <INPUT TYPE="TEXT" NAME="dados" VALUE= "Marca d gua"
/><BR />
6. <INPUT TYPE="SUBMIT" VALUE="Enviar"/>
7. </FORM>
8. </body>
9. </html>
env_met_post_esc.php
<HTML>
<HEAD><TITLE>Usando caracteres de escape</TITLE></HEAD>
<BODY>
<?php
echo $_POST ["dados"];
?>
</BODY>
</HTML>
receb_met_post_esc.php
stripslashes( )
Ao receber informaes com apstrofo ou aspas, as cotas mgicas automaticamente
colocam caracteres de escape. Para que estes caracteres de escape no apaream, utilize
o mtodo stripslashes( ).
Abaixo o mesmo exemplo de recebimento s que com a utilizao do mtodo.
<HTML>
<HEAD><TITLE>Usando caracteres de escape</TITLE></HEAD>
<BODY>
<?php
echo stripslashes($_POST ["dados"]);
?>
</BODY>
</HTML>
receb_met_post_esc.php
addslashes( )
Caso as informaes estejam sendo enviadas para uma base de dados, importante se
previnir com o mtodo addslashes( ). Assim, os caracteres de escape so forados,
21
22
Neste exemplo mostro claramente que o cookie deve ser enviado para o cliente antes de
qualquer sada.
Este um exemplo de cookie com erro:
<html>
<head>
<?php
setcookie("MeuCookie", "Testando", time()+3600);
23
Mas voc tambm pode obter o valor do Cookie usando o mtodo abreviado:
echo $_COOKIE["MeuCookie"];
24
<?php
session_start();
unset($_SESSION['nome']);
?>
25
Tipos
O PHP suporta os oitos tipos primitivos.
So quatros tipos bsicos:
boolean
integer
float (nmero de ponto flutuante, ou tambm 'double')
string
Dois tipos compostos:
array
object
E finalmente dois tipos especiais:
resource
NULL
Voc tambm pode encontrar algumas referncias ao tipo double. Considere o tipo
double como sendo o float, e os dois nomes existem por razes histricas.
<?php
$i = 10; // Inteiro
$nome = "Edson"; // String
$falso = FALSE; // Booleano
$valor = 100.50; /// Ponto flutuante
$nulo = NULL;
echo '$i do Tipo ' . gettype($i) . '<br>';
echo '$nome do Tipo ' . gettype($nome) . '<br>';
echo '$falso do Tipo ' . gettype($falso) . '<br>';
echo '$nulo do Tipo ' . gettype($nulo) . '<br>';
echo '$valor do Tipo ' . gettype($valor);
?>
tipos_no_php5.php
26
Heredoc em Strings
Outra maneira para delimitar strings utilizando a sintaxe heredoc ("<<<").
informado um identificador depois de <<<, ento a string, e ento o mesmo
identificador para fechar a delimitao.
O identificador de fechamento precisa comear na primeira coluna da linha. Alm, o
identificador utilizado precisa seguir as mesmas regras de nomeao que qualquer outro
27
Interpretao de variveis
Quando uma string especificada dentro de aspas ou heredoc, variveis so
interpretadas dentro delas.
H dois tipos de sintaxe: um simples e um complexo. A sintaxe simples a mais
comum e conveniente, provendo uma maneira de interpretar uma varivel, um valor de
array ou uma propriedade de object.
A sintaxe completa foi introduzida no PHP 4, e pode ser reconhecida por chaves ({})
envolvendo a expresso.
<?php
$cerveja = 'Heineken';
echo "O sabor das '$cerveja's timo <br />";
// funciona, " ' " um caracter invlido para nome de variveis
echo "Ele bebeu algumas $cervejas <br />";
// no funciona, 's' um caracter vlido para nome de variveis
echo "Ele bebeu algumas ${cerveja}s <br />"; // funciona
?>
interp_vars.php
Uma outra utilidade desse tipo de interpretao est na impresso de variveis como
$_GET, $_POST e etc:
Veja o exemplo dessa utilizao aplicada a um exemplo anterior:
<HTML>
<HEAD><TITLE>Mas</TITLE></HEAD>
<BODY>
Pro favor, escolha o tipo de ma:
<P><A HREF="recebe_string_cons.php?maca=vermelha">
Vermelhas deliciosas</A>
<P><A HREF="recebe_string_cons.php?maca=verde">
Verdes maravilhosas</A>
</BODY>
</HTML>
env_string_cons.php
<HTML>
28
Coero de tipo
O PHP possui a converso automtica de tipo, chamada tambm de coero de tipo
automtica. O PHP no requer (ou suporta) a definio de tipo explicita na declarao
de variveis: o tipo de uma varivel determinado pelo contexto em que a varivel
utilizada. Isto significa que, se voc assimila um valor string para a varivel $var, $var
se torna uma string. Se voc ento assimila um valor inteiro para $var, ela se torna um
inteiro.
<?php
$var1 = "0"; // $var1 string (ASCII 48)
echo $var1."<br />";
$var1 += 2; // $var1 agora um inteiro (2)
echo $var1."<br />";
$var1 = $var1 + 1.3; // $var1 agora um float (3.3)
echo $var1."<br />";
$var1 = 5 + "10 pequenos porcos"; // $var1 inteiro (15)
echo $var1."<br />";
$var1 = 5 + "10 minsculos porcos"; // $var1 inteiro (15)
echo $var1."<br />";
?>
var_tipos.php
29
Nota: Caso a sua inteno no seja fazer a coero, mas arredondar o valor, use o
mtodo round( ).
Com o mtodo gettype( ) voc consegue pegar o tipo. Usando o mtodo var_dump( )
voc consegue receber o valor e tambm saber o seu tipo, mostrando assim informaes
sobre a varivel.
<?php
$numero = 2147483647;
$numero2 = $numero * 10;
echo gettype($numero2) . "<br>";
$numero3 = 1000;
var_dump($numero*$numero3);
?>
usando_var_dump.php
Constantes
Como j foi visto anteriormente, podemos alterar o valor de uma varivel armazenada.
Tambm podemos declarar constantes. Uma constante armazena um valor como uma
varivel, mas seu valor configurado uma vez e, ento, no pode mais ser alterado em
outra parte do script. Por isso o nome Constante.
<?php
define("EXEMPLO","Texto que acompanha a constante");
define("EXEMPLO2",12); //valor que acompanha a constante
?>
<html>
<head>
<title>Constantes</title>
</head>
<body>
<?php echo EXEMPLO?><br>
<?php echo EXEMPLO2?>
</body>
</html>
constante.php
Voc notar que os nomes da constante esto inteiramente em letras maisculas. Essa
uma conveno emprestada de C que facilita distinguir rapidamente entre variveis e
constantes.
Uma diferena importante entre constantes e variveis que quando voc referencia a
uma constante, ela no tem um sinal de cifro na sua frente. Se quiser utilizar o valor de
uma constante, utilize somente seu nome.
A regra para uma constante simples:
30
As constantes tambm podem ser configuradas, para que, sejam lidas sem ser case
sensitive, passando um terceiro parmetro, como mostra o exemplo a seguir em
destaque:
<?php
define("VALOR",10);
define("FRUTA","Manga",True);
echo "Fruta = " . fruta . "<br />"; // ou Fruta ou FRUTA , tanto faz
echo "Valor = " . VALOR . "<br />"; // Ok
echo "Valor = " . Valor . "<br />"; // No ir funcionar, pois no h terceiro parmetro
define("VALOR",990); // Provocar um erro
?>
outros_ex_contantes.php
Operadores
Os operadores so smbolos que voc pode utilizar para manipular valores e variveis
realizando uma operao neles.
Em geral, os operadores podem aceitar um, dois ou trs argumentos, com a maioria
aceitando dois. Por exemplo, o operador de atribuio aceita dois a posio de
memria no lado esquerdo do smbolo "=" e uma expresso no lado direito. Esses
argumentos so chamados de operandos, isto , aquilo que est sendo operado.
Operadores Aritmticos
Lembra-se da aritmtica bsica da escola? Estes operadores funcionam exatamente
como aqueles.
Tabela dos Operadores Aritmticos
exemplo
nome
Resultado
$a + $b
Adio
Soma de $a e $b.
$a - $b
Subtrao
Diferena entre $a e $b.
$a * $b
Multiplicao
Produto de $a e $b.
$a / $b
Diviso
Quociente de $a por $b.
$a % $b
Mdulo
Resto de $a dividido por $b.
Operadores de Atribuio
O operador bsico de atribuio "=". A sua primeira inclinao deve ser a de pensar
nisto como " igual". No. Isto quer dizer, na verdade, que o operando da esquerda
31
= 3;
+= 5; // seta $a para 8, como se dissssemos: $a = $a + 5;
= "Ol ";
.= "voc a!"; // seta $b para "Ol voc a!"
Operadores de Comparao
Operadores de comparao, como os seus nomes implicam, permitem que voc
compare dois valores.
Tabela de Operadores de comparao
exemplo
nome
Resultado
$a == $b
Igual
Verdadeiro se $a igual a $b.
$a === $b Idntico
Verdadeiro se $a igual a $b, e
eles so do mesmo tipo.
$a != $b
Diferente
Verdadeiro se $a no igual a
$b.
$a < $b
Menor que
Verdadeiro se $a estritamente
menor que $b.
$a > $b
Maior que
Verdadeiro se $a estritamente
maior que $b.
$a <= $b
Menor ou igual Verdadeiro se $a menor ou
igual a $b.
$a >= $b
Maior ou igual Verdadeiro se $a maior ou
igual a $b.
Veja abaixo alguns exemplos de suas utilizaes:
<?php
$a=5;
$b=5.0;
if($a==$b)
echo "So iguais"; // Estes valores so iguais
?>
util_igualdade.php
<?php
32
33
No exemplo acima, voc tentou criar a abertura da sesso dentro de sadas de HTML.
Isso no possvel, portanto gera um erro.
Com o arroba na frente, essa possibilidade fica nula, no gerando assim sada de erros.
No uma boa prtica ocultar erros na criao de seus scripts. Isso porque voc pode
ocultar problemas que de certa forma ficam complexos de serem detectados devido essa
ocultao.
Operadores de Incremento/Decremento
O PHP suporta operadores de pr e ps-incremento e decremento no estilo C.
Tabela de Operadores de Incremento/Decremento
exemplo Nome
Efeito
++$a
Pr-incremento
Incrementa $a de um, e ento retorna $a.
$a++
Ps-incremento
Retorna $a, e ento incrementa $a de um.
--$a
Pr-decremento
Decrementa $a de um, e ento retorna $a.
$a-Ps-decremento
Retorna $a, e ento decrementa $a de um.
Aqui est um script de exemplo simples:
<HTML>
<HEAD><TITLE>Incremento e decremento</TITLE></HEAD>
<BODY>
<?php
echo "<h3>Ps-incremento</h3>";
$a = 5;
echo "Deve ser 5: " . $a++ . "<br>\n";
34
"<h3>Pr-incremento</h3>";
5;
"Deve ser 6: " . ++$a . "<br>\n";
"Deve ser 6: " . $a . "<br>\n";
echo
$a =
echo
echo
"<h3>Ps-decremento</h3>";
5;
"Deve ser 5: " . $a-- . "<br>\n";
"Deve ser 4: " . $a . "<br>\n";
echo "<h3>Pr-decremento</h3>";
$a = 5;
echo "Deve ser 4: " . --$a . "<br>\n";
echo "Deve ser 4: " . $a . "<br>\n";
?>
</BODY>
</HTML>
incremento_decremento.php
Operadores Lgicos
Tabela de Operadores Lgicos
exemplo
nome
resultado
$a and $b
E
Verdadeiro se tanto $a quanto $b so verdadeiros.
$a or $b
OU
Verdadeiro se $a ou $b so verdadeiros.
$a xor $b
XOR
Verdadeiro se $a ou $b so verdadeiros, mas no ambos.
! $a
NO
Verdadeiro se $a no verdadeiro.
$a && $b
E
Verdadeiro se tanto $a quanto $b so verdadeiros.
$a || $b
OU
Verdadeiro se $a ou $b so verdadeiros.
A razo para as duas variantes dos operandos "and" e "or" que eles operam com
precedncias diferentes.
Operadores de String
H dois operadores de string. O primeiro o operador de concatenao '.' (ponto), que
retorna a concatenao dos seus argumentos direito e esquerdo. O segundo o operador
de atribuio de concatenao '.=' (ponto-igual).
Operadores de Arrays
Tabela de Operadores de Arrays
Exemplo Nome
Resultado
$a + $b
Unio
Unio de $a e $b.
$a == $b Igualdade
TRUE se $a e $b tem os mesmos elementos.
TRUE se $a e $b tem os mesmos elementos na mesma
$a === $b Identidade
ordem.
35
Estruturas de Controle
Qualquer script PHP construdo por uma srie de instrues. Uma instruo pode ser
uma atribuio, uma chamada de funo, um 'loop', uma instruo condicional, ou
mesmo uma instruo que no faz nada(um comando vazio). Instrues geralmente
terminam com um ponto e vrgula. Alm disso, as instrues podem ser agrupadas em
um grupo de comandos atravs do encapsulamento de um grupo de comandos com
chaves. Um grupo de comandos uma instruo tambm.
Estruturas Condicionais
if
A construo if uma das mais importantes implementaes de muitas linguagens,
incluindo o PHP. Ela permite a execuo condicional de fragmentos de cdigo. O PHP
implementa uma estrutura if que similar quela do C:
if (expressao)
instrues
A condio expressao avaliada por seu contexto Booleano. Se expressao for avaliado
como TRUE (verdadeiro), o PHP executar instrues, e se for avaliado como FALSE
(falso), ele ser ignorado.
Os exemplos a seguir mostrariam que a maior que b se $a for maior que $b:
Freqentemente voc vai querer ter mais que uma instruo seja executada
condicionalmente. E claro, no h necessidade de englobar cada instruo com uma
clusula if. Em vez disso, voc pode colocar vrias instrues em um agrupamento de
comandos. Por exemplo, este cdigo mostraria a maior que b se $a for maior que $b, e
ento atribuiria o valor de $a para $b:
if ($a > $b) {
echo "a maior que b";
$b = $a;
}
36
else
Freqentemente voc vai querer executar uma instruo se uma certa condio for
encontrada, e uma instruo diferente se a condio no for encontrada. Isto o que o
else faz. else estende um comando if para executar uma instruo caso a expresso no
comando if seja avaliada como FALSE (falso). Por exemplo, o cdigo a seguir
mostraria a maior que b se $a for maior que $b, e a NO maior que b caso contrrio:
if ($a > $b) {
echo "a maior que b";
} else {
echo "a NO maior que b";
}
elseif
O comando elseif, como seu nome sugere, uma combinao de if e else. Da mesma
forma que o else, ele estende um comando if para executar uma instruo diferente no
caso de a expresso if original ser avaliada como FALSE (falso). Porm, ao contrrio de
else, ele executar aquela expresso alternativa somente se a expresso condicional do
elseif for avaliada como TRUE (verdadeiro). Por exemplo, o cdigo a seguir mostraria a
maior que b, a igual a b ou a menor que b:
$a=5;
$b=7;
if ($a >
echo
} elseif
echo
} else {
echo
}
$b) {
"a maior que b";
($a == $b) {
"a igual a b";
"a menor que b";
Podem haver vrios elseifs dentro da mesma instruo if. A primeira expresso elseif
(se houver) que for avaliada como TRUE (verdadeiro) ser executada. No PHP, voc
tambm pode escrever 'else if' (em duas palavras) e o comportamento ser idntico a
um 'elseif' (em uma s palavra). O significado sinttico ligeiramente diferente (se
voc est familiarizado com C, eles tem o mesmo comportamento), mas no final de
contas ambos teriam exatamente o mesmo comportamento.
O comando elseif s executado se a expresso if precedente e quaisquer expresses
elseif anteriores forem avaliadas como FALSE (falso), e a expresso elseif atual for
avaliada como TRUE(verdadeiro).
37
No exemplo acima, o bloco HTML "A igual a 5" est aninhado dentro de uma
instruo if escrito na sintaxe alternativa. O bloco HTML ser mostrado somente se $a
igual ao valor de 5.
A sintaxe alternativa se aplica a else e elseif tambm. A seguir temos uma estrutura if
com elseif e else no formato alternativo:
$a=7;
if ($a == 5):
echo "a igual a 5";
elseif ($a == 6):
echo "a igual a 6";
else:
echo "a no nem 5 nem 6";
endif;
38
do...while
Loops do..while so bem similares aos loops while, exceto pelo fato de que a condio
verificada no fim de cada iterao em vez de no comeo. A diferena principal dos
loops while regulares que a primeira iterao de um loop do..while garantidamente
executada (a condio s verificada no fim da iterao) enquanto que ele pode no
rodar necessariamente em um loop while normal (a condio verificada no comeo de
cada iterao, se ela avaliada como FALSE (falsa) logo no comeo, a execuo do
loop terminaria imediatamente).
H apenas uma sintaxe para loops do..while:
$i = 0;
do {
echo $i;
} while ($i>0);
O loop acima rodaria exatamente uma vez, desde que depois da primeira iterao,
quando a condio verificada, ela avaliada como FALSE (falsa) ($i no maior que
zero 0) e a execuo do loop termina.
for
Loops for so os laos mais complexos em PHP. Eles se comportam como os seus
compatveis em C. A sintaxe de um loop for :
for (expressao1; expressao2; expressao3) instrues
39
Obviamente, o primeiro exemplo parece ser o mais bonito (ou talvez o quarto), mas
voc pode perceber que a possvel utilizao de expresses vazias em laos for se torna
prtico em algumas ocasies.
O PHP tambm suporta a "sintaxe de dois-pontos" alternativa para laos for:
for (expressao1; expressao2; expressao3): instrucoes; ...;
endfor;
Existe ainda um outro tipo de loop que dotado para trabalhar com colees. Voc ver
isso mais adiante.
40
41
Um case especial o default. Esse case executado quando nenhum outro case
combina. Ele precisa ser a ltima instruo case. Por exemplo:
switch ($i) {
case 0:
echo "i
break;
case 1:
echo "i
break;
case 2:
echo "i
break;
default:
echo "i
}
igual a 0";
igual a 1";
igual a 2";
no igual a 0, 1 ou 2";
A expresso avaliada pelo case precisa ser um tipo simples, ou seja, inteiros, nmeros
de ponto flutuante e strings. Arrays ou objetos no podem ser utilizados a no ser que
eles impliquem num tipo simples.
A sintaxe alternativa para estruturas de controle suportada para os switches.
Sintaxe alternativa para estruturas de controle
switch ($i):
case 0:
echo "i
break;
case 1:
echo "i
break;
case 2:
echo "i
break;
default:
echo "i
endswitch;
igual a 0";
igual a 1";
igual a 2";
no igual a 0, 1 ou 2";
break
break cancela a execuo do comando for, foreach while, do..while ou switch atual.
break aceita um argumento numrico opcional que diz a ele quantas estruturas
aninhadas englobadas devem ser quebradas.
continue
continue usado dentro de estruturas de loops para saltar o resto da iterao do loop
atual e continuar a execuo no incio da prxima iterao.
42
return
Se chamada em uma funo, a instruo return( ) termina imediatamente a execuo da
funo atual e retorna seu argumento como o valor da funo.
return( ) tambm termina a execuo de uma instruo eval( ) ou de um script.
Se chamada no escopo global, a execuo do script atual ser terminada. Se o arquivo
do script atual foi includo com include( ), require( ) ento a execuo devolvida para
o arquivo chamador. Especificamente para arquivos de script includos com include( ), o
valor fornecido para return( ) ser devolvido como o valor da chamada include().
Nota: Note que return( ) um construtor de linguagem e no uma funo, e parnteses
em volta do seus argumentos no so necessrios -- de fato, mais comum no coloclos que us-los, sem, entretanto, haver diferena de um jeito ou de outro.
require( )
A instruo require( ) e include( ) so idnticos em todas as formas exceto pela
manipulao de erros.
include( ) produz Warning enquanto require( ) produzir um Fatal Error. Em outras
palavras, no hesite em utilizar require( ) se na falta de um arquivo quiser parar o
processamento da pgina.
include( ) no se comporta da mesma maneira, e o script poder continuar nessa
situao.
43
include( )
A instruo include( ) inclui e avalia o arquivo informado. Sua semelhana com o
require dispensa maiores explicaes.
Qualquer varivel disponvel da linha onde a chamada da incluso ocorre estar
disponvel para o arquivo includo, daquele ponto em diante.
Veja os exemplos de include( ):
<?php
$nome = 'Leonardo';
$apelido = 'Leo';
?>
includ.php
<?php
echo "O nome $nome e seu apelido $apelido";
//As variveis esto vazias
include 'includ.php';
echo " O nome $nome e seu apelido $apelido";
// As variveis neste caso contm as informaes inclusas
?>
ex_include.php
Se o include ocorre dentro de uma funo do arquivo principal, ento todo o cdigo
includo ser executado como se ele tivesse sido definido dentro daquela funo. Da
44
45
// Funciona.
// Funciona.
?>
46
$teste2 assimila o valor 1 porque a incluso foi realizada com sucesso. Verifique a
diferena entre os exemplos. O primeiro utiliza return( )
dentro do arquivo includo enquanto que o outro no. H outras maneiras de "incluir"
arquivos dentro de variveis, com fopen( ), file( ) ou utilizando include( ) atravs das
Funes de Controle de Sada.
require_once( )
A instruo require_once( ) avalia o arquivo especificado durante a execuo do script.
Seu comportamento similar ao da instruo require( ), a no ser que o arquivo
informado j tenha sido includo, no refazendo a operao novamente.
include_once( )
A instruo include_once( ) inclui e avalia o arquivo especificado durante a execuo de
um script. Seu comportamento similar instruo include( ), a no ser que o arquivo
informado j tenha sido includo, no refazendo a operao novamente. Como o nome
sugere, ele ser includo apenas uma vez.
Funes
Funes definidas pelo usurio
Uma funo pode ser definida usando-se a sintaxe como a seguinte:
function teste($argumento1, $argumento2, ..., $argumentoN) {
echo "Funo de exemplo.<Br>\n";
return $retonaValor;
}
Qualquer cdigo PHP vlido aparece dentro de uma funo, mesmo outras funes e
definies de classes.
O PHP no suporta sobrecarga de funes, e tambm no possvel cancelar ou alterar
a definio de funes previamente declaradas.
Argumentos de funes
Informao pode ser passada para funes atravs da lista de argumentos, que uma
lista de variveis e/ou constantes delimitados por vrgulas.
O PHP suporta a passagem de argumentos por valor (o padro), passagem por referncia
valores padro de argumento.
47
O valor padro precisa ser uma expresso constante, no (por exemplo) uma varivel ou
um membro de classe.
Note que usando argumentos padro, qualquer padro dever estar do lado direito de
argumentos no-padro; caso contrrio, as coisas no funcionaro como esperado.
Considere o seguinte trecho de cdigo:
<?php
function arg_errado ($tipo = "exemplo", $argumento2) {
return "Este um $tipo de $argumento2.\n";
}
echo arg_errado ("texto");
?>
func_arg_err.php
for
arg_errado(
in
48
49
Retornando valores
Valores so retornados pelo uso de comandos opcionais de retorno. Qualquer tipo pode
ser retornado, incluindo listas e objetos.
<?php
function teste ($numero) {
return $numero+$numero*2;
}
echo teste (7);
// imprime '21'.
?>
func_return_val.php
Escopo de variveis
O escopo de uma varivel o contexto onde ela foi definida. A maior parte das
variveis do PHP tem somente escopo local. Este escopo local inclui os arquivos
50
Aqui a varivel $a estar disponvel no script includo b.inc. Entretanto, com as funes
definidas pelo usurio, um escopo local introduzido. Quaisquer variveis utilizadas
dento da funo por padro limitada dentro do escopo local da funo. Por exemplo:
<?php
$a = 1; /* escopo global */
function Teste()
{
echo $a; /* referencia uma varivel do escopo local (no
definida) */
}
Teste();
?>
ex_esc_err.php
Este script no produz nenhuma sada porque a instruo echo( ) refere-se a uma verso
local da varivel $a, e ela no tem nenhum valor assimilado nesse escopo. Essa uma
pequena diferena da linguagem C quando variveis globais so automaticamente
disponveis para funes sem sobrescrever uma eventual definio local. Isto causa
problemas quando as pessoas mudam inadvertidamente uma varivel global. No PHP,
as variveis globais precisam ser declaradas globais dentro de uma funo se ela vai ser
utilizada naquela funo. Um exemplo:
<?php
$a = 1;
$b = 2;
function Soma()
{
global $a, $b,$c;
$c = $a + $b;
}
Soma();
echo $c;
?>
ex_esc_global.php
51
Variveis Estticas
<?php
function Teste ()
{
$a = 0;
echo $a;
$a++;
}
for($i=0;$i<10;$i++)
Teste();
?>
Essa funo intil partindo de que cada vez que ela chamada, ela coloca em $a o
valor 0 e imprime "0". A instruo $a++ , que aumenta o valor da varivel no tem
sentido desde que a funo sai e a varivel $a desaparece. Para faz-la mais til como
contadora sem deixar de perder o sua conta atual, a varivel $a declarada como
esttica:
<?php
function Teste()
{
static $a = 0;
echo $a;
$a++;
}
for($i=0;$i<10;$i++)
Teste();
?>
Agora, cada vez que a funo Teste( ) for chamada ele imprimir o valor de $a e o
incrementar.
52
Seria impossvel ter a varivel dentro do bloco e esperar a finalizao do loop, sabendo
que esta varivel sempre voltar a zero, tornando-o infinito.
53
54
55
56
O nome da classe
Toda definio de classe comea com a palavra-chave class, seguido por um nome da
classe, que pode ser qualquer nome que no seja uma palavra reservada no PHP.
A seguir voc tem a definio de uma classe simples:
<?php
class Classe {
/* declarao de membro */
public $var = 'um valor padro de acesso pblico';
/* declarao de mtodo pblico mostrar*/
public function mostrar( ) {
echo $this->var;
}
}
?>
class_simp.php
new
Para criar uma instncia de um objeto, um novo objeto deve ser criado e atribudo a uma
varivel. Um objeto sempre ser atribudo quando um novo objeto for criado a no ser
que o objeto tenha um construtor definido que dispara uma exceo por um erro.
<?php
require("class_simp.php");
?>
<html>
<head>
<title>Utilizando uma classe simples</title>
</head>
<body>
<?php
$instancia = new Classe( );
$instancia->mostrar( );
57
A classe Caixa
A seguir, voc tem mais um exemplo. A idia fixar a utilizao de orientao a objetos
com PHP5.
A classe Caixa teria como atributos caractersticas como as dimenses, cor, contedo e
coisas semelhantes. As funes ou mtodos que poderamos incorporar a classe "Caixa"
so as funcionalidades que queremos que a caixa realize, por exemplo: introduz( ),
mostra_conteudo( ), comprova_se_cabe( ), esvaziar( )...
<?php
class Caixa{
private $conteudo;
public function introduz($coisa){
$this->conteudo = $coisa;
}
public function mostra_conteudo( ){
echo $this->conteudo;
}
}
?>
class_caixa.php
Neste exemplo criou-se uma classe de nome Caixa, indicando como atributo o
contedo. Para comear, um par de mtodos foram criados, um para introduzir um
elemento
na
caixa
e
outro
para
mostrar
o
contedo.
Se repararmos, os atributos definem-se declarando umas variveis ao principio da
classe. Os mtodos definem-se declarando funes dentro de uma classe. A varivel
$this, utilizada dentro dos mtodos ser explicado mais adiante.
Atributos
Um atributo um dado para o qual cada objeto tem seu prprio valor.
Atributos so, basicamente, a estrutura de dados que vai representar a classe.
Exemplo de atributos, usando a classe fila:
private $fila;
58
Mtodos
Mtodos so declarados dentro de uma classe para representar as operaes que os
objetos pertencentes a esta classe podem executar.
Um mtodo a implementao de uma rotina, ou seja, o cdigo propriamente dito. Pode
ser comparado a um procedimento ou funo das linguagens imperativas.
Exemplo de mtodos, utilizando a classe fila:
public function iniciar ( ) {
$this->primeiro = 0;
$this->ultimo = 0;
}
A varivel $this
Dentro de um mtodo, a varivel $this faz referncia ao objeto sobre o qual invocamos
o mtodo. Na invocao $minhacaixa->introduz("algo") voc est chamando o mtodo
introduzido sobre o objeto $minhacaixa. Quando executar esse mtodo, passa-se o valor
que recebe por parmetro ao atributo contido. Neste caso $this->conteudo faz
referncia ao atributo contido no objeto $minhacaixa, que sobre o que se invocava no
mtodo.
Visibilidade
PHP 5 & MySQL 5 for Web www.integrator.com.br/php
59
Caixa::$conteudo
in
Esse erro indica que voc est tentando acessar um membro private.
Agora vamos modificar a classe Caixa, tornando o membro $conteudo public:
<?php
class Caixa{
public $conteudo;
...
class_caixa.php
Ao fazer isso, voc notar que acessar esse membro no causar erro. Se voc desejar
ecoar o valor do membro $conteudo, voc ter que alterar a pgina
60
Objeto
O que caracteriza a programao orientada a objetos so os objetos. De um modo geral
podemos encarar os objetos como sendo os objetos fsicos do mundo real, tais como:
carro, avio, casa, telefone, computador, etc., por isso que s vezes dito que orientao
a objetos representa os problemas mais prximos ao mundo real, dando assim mais
facilidade a programao como um todo, mais isso no sempre verdade, porque s
vezes temos problemas que so extremamente funcionais. Nesses problemas funcionais
difcil representar a estrutura lgica em torno de objetos. Com isso, no so todos os
problemas que giram em torno dos objetos facilmente visveis.
De maneira simples, um objeto uma entidade lgica que contm dados e cdigo para
manipular esses dados. Os dados so denominados como sendo atributos do objeto, ou
seja, a estrutura que o objeto tem, e o cdigo que o manipula denominamos mtodo. Um
mtodo uma funo que manipula a estrutura de dados do objeto.
Construtores em PHP
Os construtores so funes, ou mtodos, que se encarregam de realizar as tarefas de
iniciao dos objetos ao serem instanciados. Isto , quando se criam os objetos a partir
das classes, chama-se um construtor que se encarrega de iniciar os atributos do objeto e
realizar qualquer outra tarefa de inicializao que seja necessria.
No obrigatrio dispor de um construtor, mas so muito teis e a sua utilizao
muito habitual. No exemplo da caixa, o normal seria iniciar as variveis como cor ou as
relacionadas com as dimenses e tambm indicar que o contedo da caixa est vazio. Se
no h um construtor no se iniciam nenhum dos atributos dos objetos.
O construtor se define dentro da prpria classe, como se fosse outro mtodo. O nico
detalhe que o construtor deve ser chamado como __construct .
Para a classe Caixa definida anteriormente, poderia declarar-se este construtor, como
mostrado em destaque a seguir:
<?php
class Caixa{
private $altura;
private $espessura;
private $largura;
private $conteudo;
private $cor;
function __construct($altura=1,$espessura =1,$largura=1,$cor="preto"){
$this->altura=$altura;
$this->espessura=$espessura;
$this->largura=$largura;
$this->cor=$cor;
61
Destrutores
PHP 5 introduz um conceito de destrutor similar ao de outras linguagens orientadas a
objeto, como o Java. O mtodo destrutor ser chamado assim que todas as referncias a
um objeto particular forem removidas ou quando o objeto for explicitamente destrudo.
<?php
class MinhaClasseDestruivel {
function __construct( ) {
print "No construtor\n";
$this->name = "MinhaClasseDestruivel<br />";
}
function __destruct( ) {
print "Destruindo " . $this->name . "\n";
}
}
$obj = new MinhaClasseDestruivel( );
?>
class_destruct.php
Como os construtores, destrutores pais no sero chamados implicitamente pelo engine.
62
Herana em PHP
A programao orientada a objetos tem um mecanismo chamado herana pela que qual
se podem definir classes a partir de outras classes. As classes realizadas a partir de outra
classe, ou melhor dizendo, que derivam de outra classe, chamam-se classes derivadas.
As classes derivadas herdam todos os atributos e mtodos da classe base, que podem ter
tantos atributos e mtodos novos como quiser.
Para ampliar o exemplo, da classe Caixa, vamos criar uma classe derivada chamada
Caixa_Tipo. Esta classe herda de caixa, mas tem um "tipo", que a descrio do tipo
de coisas que colocamos na caixa. Com isto podemos ter varias caixas, cada uma com
coisas diferentes.
<?php
require("class_caixa.php");
class Caixa_Tipo extends Caixa{
private $tipo;
function define_tipo($novo_tipo){
$this->tipo = $novo_tipo;
}
}
?>
class_caixa_tipo.php
Na construo dessa classe, herdamos de Caixa todos os atributos e mtodos da classe
base. Tambm se definiu um novo atributo, chamado $tipo, e um mtodo, chamado
define_tipo( ), que recebe o tema com o que se deseja inserir na caixa.
Poderamos utilizar a classe Caixa_Tipo de maneira similar como fazamos com a classe
Caixa original:
<?php
require("class_caixa_tipo.php");
?>
<html>
<head>
<title>Utilizando a classe caixa tipo</title>
</head>
<body>
<?php
$minhacaixa_tematica = new Caixa_Tipo( );
$minhacaixa_tematica->define_tipo("Cabos e conectores");
$minhacaixa_tematica->introduz("Cabo de rede");
63
64
class_caixa_tipo.php
Aqui vemos a redefinio de construtor, da classe Caixa, para a classe Caixa_Tipo. O
construtor faz primeiro uma chamada ao construtor da classe base, atravs de uma
referncia a parent. Depois inicia o valor do atributo $tipo, que especifico da
Caixa_Tipo.
Na mesma linha de trabalho, podemos redefinir o mtodo mostra_conteudo( ) baseandonos no que foi declarado para a classe base. O cdigo ficaria assim:
<?php
require("class_caixa.php");
class Caixa_Tipo extends Caixa{
private $tipo;
function __construct($altura=1,$espessura=1,
$largura=1,$cor="preto",
$tipo="Sem classificao")
{
parent::__construct($altura,$espessura,$largura,$cor);
$this->tipo=$tipo;
}
function define_tipo($novo_tipo){
$this->tipo = $novo_tipo;
}
function mostra_conteudo( ){
echo "Conteudo da caixa de <b>" . $this->tipo . "</b>: ";
parent::mostra_conteudo( );
}
}
?>
class_caixa_tipo.php
Operador de Resoluo de Escopo (::)
O Operador de Resoluo de Escopo, tambm chamado de Paamayim Nekudotayim
(significa dois pontos duplos - em Hebreu), ou em termos mais simples, dois pontos
65
66
67
68
$salarioEmpregado->salvar( );
$salarioEmpregado = new SalarioEmpregado("Edna ","Gonalves","222.123.145-01", -5);
69
?>
</body>
</html>
main_sal_emp.php
Para ilustrar seu aprendizado, construa uma classe de lixeira, onde haver tipos como
reciclveis: vidros, plstico e papel e no reciclveis: lixo orgnico e no orgnico.
Arrays (Matrizes)
Umas das construes mais importantes da programao so chamadas de arrays. At
agora, as variveis que voc viu e utilizou so chamadas de variveis escalares, que
armazenam um nico valor. Um array uma varivel que armazena um conjunto ou
seqncia de valores. Um array pode conter muitos elementos. Cada elemento pode
armazenar um nico valor, como texto ou nmeros ou outro array. Um array contendo
outro array conhecido como array multidimensional.
O que um array?
Um array um lugar identificado para armazenar um conjunto de valores, permitindo
assim armazenar variveis escalares comuns.
Veja um exemplo simples:
Digamos que voc tenha trs produtos para vender e quer list-los. Esses produtos so
considerados trs valores dentro de uma matriz. Assim teramos a tabela abaixo:
Monitor
Teclado
Mouse
produto
Depois de ter as informaes como uma matriz, podemos utilizar um loop para realizar
a varredura no array e obter os produtos guardados. Com a utilizao de funes
especficas do PHP, voc pode ter, por exemplo, os produtos listados em ordem
alfabtica.
70
</body>
</html>
ex_cria_matriz_linear.php
71
A diferena que este loop exigir menos digitao. Isso torna seu cdigo mais vivel e
rpido.
Arrays Associativos
Arrays associativos so chaves ou ndices que usamos para acessar cada valor
armazenado.
O cdigo a seguir mostra um exemplo de um array associativo:
<html>
<body>
<?php
$preco=array('Monitor'=>550,'Teclado'=>48,'Mouse'=>15);
echo $preco ['Monitor'];
?>
</body>
</html>
ex_arr_ass.php
Note que ao testar o cdigo, voc ter na sua tela o valor de 550, que o valor que est
atribudo chave Monitor.
Uma outra maneira de se acessar as informaes do array utilizando esta forma
ligeiramente diferente do numrico:
<?php
$produto["Monitor"]=550;
$produto["Teclado"]=48;
$produto["Mouse"]=15;
echo $produto["Monitor"];
?>
72
Um caso bem comum o de voc desejar criar dois loops em um mesmo script. Para
isso utilize a funo reset( ) para reiniciar o array. Isso acontece porque o cursor aps a
execuo de um loop se encontra no fim do array.
O script completo seria:
<html>
<body>
<?php
$precos=array('Monitor'=>550,'Teclado'=>48,'Mouse'=>15);
while($dados = each($precos)){
echo $dados["key"]." - ".$dados["value"]."<br />";
}
reset($precos);
while(list($produto,$preco) = each($precos)){
echo "$produto - $preco<br />";
}
?>
</body>
</html>
ex_loop_each_list.php
Com uma variao do loop for, temos com a juno de each ao loop, fora criado um
73
foreach
O PHP5 inclui uma construo foreach, muito parecido com o PERL e outras
linguagens. Isto simplesmente oferece uma maneira fcil de interar sobre matrizes. H
duas sintaxes; a segunda uma abreviatura, mas til, da primeira:
foreach(expressao_matriz as $valor) instrucoes
foreach(expressao_matriz as $chave => $valor) instrues
A primeira forma varre um array dado por expressao_matriz. Em cada 'loop', o valor do
elemento corrente atribudo a $valor e o ponteiro interno da matriz avanado em
uma posio (assim, na prxima iterao, voc estar olhando para o prximo
elemento).
A segunda forma faz a mesma coisa, exceto pelo fato de que a chave do elemento atual
ser atribuda varivel $chave em cada iterao.
Obs.: Quando o foreach inicia sua primeira execuo, o ponteiro interno da matriz
zerado automaticamente, posicionando-o no incio. Isto significa que voc no precisa
chamar reset( ) antes de um loop foreach .
Obs 2.: Note tambm que foreach opera sobre uma cpia do array especificado, no o
prprio array, portanto o ponteiro do array no modificado como na instruo each( ),
que altera o elemento do array selecionado, mas isso no se reflete o array original.
Obs 3.: foreach tem a habilidade de evitar mensagens de erro com o @.
Voc pode ter notado que os seguintes itens so funcionalmente idnticos:
reset ($matriz); //a funo reset() reinicia a matriz
while (list(, $valor) = each ($matriz)) {
echo "Valor: $valor<br />\n";
}//exemplo de utilizao do loop while com a funo each()
foreach ($matriz as $valor) {
echo "Valor: $valor<br />\n";
} //exemplo do loop foreach()
74
=
=
=
=
"Roberto";
"Joo";
"Luana";
"Lilian";
foreach($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2<br>";
}
} //exemplo da utilizao do loop com array multidimensional
?>
ex_foreach_arr_mult.php
1.
<?php
2.
foreach(array('Roberto', 'Joo', 'Luana', 'Lilian',
'Roberta') as $v) {
2.1.1. echo "$v<br>";
3.
}// exemplo da utilizao do loop com array dinmico
4.
?>
ex_foreach_arr_dinam.php
75
ex_prat_foreach.php
Arrays Bidimensionais
As matrizes no tm de ser uma lista simples de chaves e valores cada localizao na
matriz pode armazenar outra matriz. Dessa maneira, podemos criar uma matriz
bidimensional. Voc pode pensar em uma matriz de duas dimenses como sendo uma
grade, com largura e altura ou linhas e colunas.
Veja no quadro abaixo:
Cdigo
MO
TE
MS
Descrio
Monitor
Teclado
Mouse
Preo
550,00
48,00
15,00
No exemplo abaixo, voc tem um array bidimensional com a seqncia que o acessa.
<?php
$produtos=array(
76
Classificando arrays
Freqentemente til classificar os dados relacionados armazenados em um array.
Pegar um array dimensional e classific-lo no pedido bem fcil.
Utilizando sort( )
O seguinte cdigo resulta no array sendo classificado em ordem alfabtica crescente:
<?php
$produtos=array("Monitor","Teclado","Mouse","Armrio");
sort($produtos);
for($i=0;$i<4;$i++){
echo $produtos[$i]."<br>";
}
?>
arr_func_sort.php
77
arr_func_shuffle.php
Redirecionando um usurio
Para redirecionar um usurio indesejado, utilize a funo header( ).
header("Location: http://www.integrator.com.br");
Nota: A funo header( ) deve ser usada antes de lanado qualquer informao no
browser, caso contrrio, esta retornar um erro.
ereg( )
ereg_replace( )
eregi( )
eregi_replace( )
78
As expresses regulares
Tabela de expresses regulares
Smbolo
^
$
n?
n*
n+
n{2}
n{2,}
n{2,4}
.
()
(.*)
(n|a)
[1-6]
[c-h]
[D-M]
[^a-z]
O que significa?
Incio da linha
Fim da linha
Zero ou somente uma nica ocorrncia de caracteres 'n'
Zero ou mais ocorrncia de caracteres 'n'
Pelo menos um ou mais ocorrncias de caracteres 'n'
Exatamente duas ocorrncias de 'n'
Pelo menos 2 ou mais ocorrncias de 'n'
De 2 at 4 ocorrncias de 'n'
Qualquer caractere nico
Parnteses para agrupar expresso
Zero ou mais ocorrncias de qualquer caractere nico
Ou 'n' ou 'a'
Qualquer dgito nico entre 1 e 6
Qualquer letra nica em minscula entre c e h
Qualquer letra nica em maiscula entre D e M
Qualquer caractere nico EXCETO qualquer letra que esteja
entre a seqncia at z.
79
A funo ereg( )
A funo ereg( string expressao, string variavel [, array registros] ) uma funo
booleana, ou seja, retorna TRUE, caso tenha sucesso em sua verificao:
Verifica se a varivel similar com a expresso regular definida em expressao em um
modo sensvel a distino de caracteres (case sensitive).
Se existirem parnteses de substrings na expressao e for passado o terceiro parmetro
registros para a funo, a execuo guardar os elementos resultantes na matriz
registros. $registros[1] ir conter a substring indicada pelo primeiro parnteses da
esquerda; $registros[2] contm a segunda substring, e assim por diante. $registros[0]
conter uma cpia completa da varivel casada.
<?php
function valida_cep($_cep) {
// Valida um CEP no formato 99999-999 ou 99999999
if(ereg("^([0-9]){5}-?([0-9]){3}$",$_cep,$_c)) {
return Array($_c[1],$_c[2]);
}
else {
return FALSE;
}
}
$_cp = array("05735-010","03578000","A0010-000","98120");
foreach($_cp as $_cep) {
if(($_r=valida_cep($_cep))===FALSE) {
echo "$_cep: CEP Incorreto";
}
else {
echo "$_cep: CEP OK";
}
echo "<br/>";
}
?>
ereg_valida_cep.php
80
A funo ereg_replace( )
A funo ereg_replace ( string expressao, string substituicao, string variavel ) busca
em varivel resultados para a expressao, substituindo se casar pelo texto em
substituio.
A varivel modificada ser retornada (poder ocorrer da string original ser retornada
caso no acontea nenhuma substituio).
Se a expressao contiver parnteses de substrings, a substituicao ser realizada atravs do
formato \\digit, que indicar qual parte do texto substitudo dever ser retornada; \\0
retornar a string na integra. At nove substrings podem ser usadas. Os parnteses
podem ser aninhados, sendo que a contagem ser feita atravs da quantidade de
parnteses abertos.
Se no tiverem valores que casem com o parmetro variavel, o resultado ser a varivel
inalterada.
<?php
$_str = "http://www.integrator.com.br";
echo ereg_replace("http://www", "ftp://ftp", $_str);
echo "<br/>";
81
Dgitos de 0 at 9
Caracteres alfanumricos de 0 at 9 ou A at Z ou a at z.
Caracteres alfabticos de A at Z ou a at z.
Caracteres de espao e tabulao.
Dgitos hexadecimais
Smbolos de pontuao . , " ' ? ! ; :
Todos os caracteres que podem ser impressos.
Caracteres de espao.
Todos os caracteres impressos, menos espao.
Caracteres alfabticos maisculos de A at Z.
Caracteres minsculos de a at z.
Caracteres de control.
caractere control
Backspace
form feed
line feed
carriage return
horizontal tab
vertical tab
A funo eregi_replace( )
No ser colocado um exemplo nessa apostila por ser idntica a ereg_replace( ),
diferenciando-se apenas por ser insensvel a maisculas e minsculas.
A funo str_replace( )
A funo str_replace ( mixed pesquisa, mixed substitui, mixed assunto [, int &count] )
substitui todas as ocorrncias da string de procura com a string de substituio.
Esta funo retorna uma string ou um array com todas as ocorrncias de pesquisa em
assunto substitudas com a o valor dado para substituir.
<?php
$str_inv = array("/", "\\", "'");//lista de strings invlidas
$_str="Esse/ um exemplo de\\informao invlida'//como voc pode ver<br>";
echo $str_retornada = str_replace($str_inv, " ", $_str, $c);
echo $c;
?>
82
A funo number_format( )
A funo number_format ( float number [, int decimals] ) ou number_format ( float
number, int decimals, string dec_point, string thousands_sep ) formata um nmero com
os milhares agrupados.
A funo number_format( ) retorna uma verso formatada de number. Esta funo
aceita um, dois ou quatro parmetros (no trs):
Se apenas um parmetro dado, number ser formatado sem decimais, mas com uma
virgula (",") entre cada grupo de milhar.
Se dois parmetros so dados, number ser formatado com o nmero de casas decimais
especificadas em decimals com um ponto (".") na frente, e uma vrgula (",") entre cada
grupo de milhar.
Se todos os quatro parmetros forem dados, number ser formatado com o nmero de
casas decimais em decimals, dec_point ao invs do ponto (".") antes das casas decimais
e thousands_sep ao invs de uma vrgula (",") entre os grupos de milhares.
<?php
$numero = 125456.72;
$f1 = number_format($numero);
$f2 = number_format($numero,3);
$f3 = number_format($numero,2,",",".");
echo "number_format, com 1 parmetro: $f1 ";
echo "<br>com 2 parmetros: $f2";
echo "<br>com todos os parmetros: $f3";
?>
number_format.php
A funo nl2br( )
A funo nl2br ( string ) insere quebras de linha HTML antes de todas newlines em
uma string.
Como essa funo retorna string com '<br />' inserido antes de todas as newlines,
excelente em uso com a tag <TEXTAREA> do HTML.
<?php
$texto = "Este um texto\ncom line-feed como quebra\n de pgina";
echo "sem nl2br( ):<br />$texto<br /><br />Com nl2br( ):<br />" . nl2br($texto);
?>
nl2br.php
A funo wordwrap( )
A funo wrodwrap( string string [, int largura [, string quebra [, boolean corte]]] )
insere na string informada o caracter de quebra de linha \\n (ou um outro caracter
qualquer, por exemplo <BR>), a cada n caracteres (o padro 75). O parmetro corte
serve para forarmos a quebra mesmo para palavras extremamente grandes.
Essa funo excelente quando temos um site formatado em determinada largura
(dentro ou no de uma tabela), mas por ser dinmico, as informaes postas podem ser
grandes por erros na digitao, bagunando assim o layout criado.
<?php
$texto = "A funo wrodwrap insere na string informada o caracter de
83
A funo strip_tags( )
Extremamente til em um sistema dinmico, principalmente de uso pblico como
fruns e livro de visitas.
A funo strip_tags ( string str [, string allowable_tags] ) retira tags HTML e PHP de
uma string. Voc pode utilizar o segundo parmetro, que opcional, para indicar tags
que no devem ser retiradas.
<?php
$texto = "<b>Exemplo de Strig_tags</b>
<script>alert('Este um Java
script embutido no texto')</script>";
echo $texto . "<br>";
echo strip_tags($texto," <b>");
?>
strip_tags.php
A funo htmlentities( )
Tambm muito til, a funo htmlentities( string string [, int quote_style [, string
charset]] ) tem a habilidade de converter as tags para entidades HTML, no causando
formataes indesejadas em sites dinmicos, principalmente os de insero de contedo
pblico.
<?php
$valor = "<B><FONT COLOR='RED'>
Exemplo de htmlentities( )
</B></FONT><BR>";
echo $valor;
echo htmlentities($valor);
?>
htmlentities.php
O inverso dessa funo html_entity_decode( ).
<?php
$string = "<B><FONT COLOR=
'RED'>Exemplo de
htmlentities()</B></FONT><BR>";
84
Enviando um e-mail
Funo mail( )
Envia um e-mail de um formulrio ou diretamente por uma pgina em PHP.
Escopo da funo:
bool mail ( string para, string assunto, string mensagem [, string
cabealhos_adicionais [, string parametros_adicionais]])
<?php
$para="integrator@integrator.com.br";
$assunto="Envio de e-mail";
$mensagem="Testando o e-mail pelo PHP";
mail( $para,$assunto,$mensagem);
?>
85
O que faz
abre um arquivo
escreve em um arquivo
fecha um arquivo
<?php
// Abre ou cria o arquivo exemplo1.txt
// "a" representa que o arquivo aberto para ser escrito
$fp = fopen("exemplo1.txt", "a");
// Escreve "primeiro exemplo" no exemplo1.txt
$escreve = fwrite($fp, "primeiro exemplo");
// Fecha o arquivo
fclose($fp);
?>
ex_cria_escreve.php
86
'w+'
'a'
'a+'
'x'
'x+'
Com estas trs funes voc pode criar, escrever e fechar um arquivo facilmente. Voc
tambm pode usar a funo fputs( ).
fputs( ) uma funo sinnima (alias) para fwrite( ), e idntica em todas as maneiras.
O que faz
Divide uma string
abre um diretrio
l os arquivos de um diretrio
fecha um diretrio
verifica se um arquivo existe
<html>
<head><title>Cadastro de usurios</title></head>
<body>
<form method="POST" action="cad_dados_txt.php">
Nome: <input type="text" size="10" name="nome"><br>
E-mail: <input type="text" size="10" name="email"><br>
Endereo: <input type="text" size="10" name="endereco"><br>
Telefone: <input type="text" size="10" name="telefone"><br>
87
88
89
?>
data_formatada.php
Descrio
aABdDFgGhHiIjlLmMnOrsStTUwWYyz-
"am" ou "pm"
"AM" ou "PM"
Swatch Internet time
dia do ms, 2 digitos com zeros esquerda; i.e. "01" at "31"
dia da semana, texto, 3 letras; e.g. "Fri"
ms, texto, longo; e.g. "January"
hora, Forma com 12-horas sem zeros esquerda; i.e. "1" at "12"
hora, Forma com 24-horas sem zeros esquerda; i.e. "0" at "23"
hora, Forma com 12-horas; i.e. "01" at "12"
hora, Forma com 24-horas; i.e. "00" at "23"
minutos; i.e. "00" at "59"
"1" Se no horrio de vero, seno "0".
Dia do ms sem zeros esquerda; i.e. "1" at "31"
dia da semana, texto longo; e.g. "Friday"
booleano se um ano bissexto; i.e. "0" ou "1"
ms; i.e. "01" at "12"
ms, texto, 3 letras; e.g. "Jan"
ms sem zeros esquerda; i.e. "1" at "12"
Diferena entre o horrio de Greenwich em horas; e.g. "+0200"
RFC 822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200"
segundos; i.e. "00" at "59"
Sufixo ordinal para o dia do ms, 2 caracteres; i.e. "st", "nd", "rd" or "th"
nmero de dias do dado ms; i.e. "28" at "31"
Timezone setting desta mquina; e.g. "EST" or "MDT"
segundos desde a poca Unix (January 1 1970 00:00:00 GMT)
dia da semana, numrico, i.e. "0" (domingo) at "6" (Sbado)
ISO-8601 nmeros de semanas do ano, semana comea na segunda-feira
ano, 4 dgitos; e.g. "1999"
ano, 2 dgitos; e.g. "99"
dia do ano; i.e. "0" at "365"
90
Existem alguns casos em que voc poder inserir dados em formato de data no MySQL.
Se isso acontecer, voc ter o seguinte formato: aaaa/mm/dd.
MySQL
At agora, voc est em contato somente com o PHP, mas em si, o PHP no teria grande
serventia se no houvesse uma integrao com banco de dados.
Utilizar um banco de dados a melhor deciso que voc poder tomar, mesmo porque,
o acesso a dados bem mais rpido que o acesso a arquivos simples (flat files).
Em termos mais concretos, utilizar um banco de dados relacional permite rpida e
facilmente responder consultas a respeito de onde so seus clientes, qual de seus
produtos est vendendo melhor ou que tipo de clientes gastam mais.
O banco de dados que utilizaremos nesta seo o MySQL.
Essa escolha no ao acaso, pois sabemos que existem grandes sistemas de banco de
dados espalhados no mercado.
Mas como o PHP pertence comunidade livre, fica claro que seus desenvolvedores
tenham tambm a preferncia por um sistema de banco de dados livre.
Mas voc no precisa cruzar os braos e ficar parado s porque no conhece o MySQL
e trabalha com Oracle ou MSSQL. O PHP tambm tem suporte para esses bancos de
dados.
O que MySQL?
MySQL um sistema de gerenciamento de banco de dados relacional, multiencadeado,
de cdigo-fonte aberto e nvel corporativo.
O MySQL foi desenvolvido por uma empresa de consultoria na Sucia chamada
inicialmente de TcX, depois, com a popularidade do MySQL, passou a se chamar
MySQL AB.
Seu desenvolvimento ocorreu quando estavam precisando de um sistema de banco de
dados que fosse extremamente rpido e flexvel. Foi, assim ento, que eles criaram o
MySQL, que vagamente baseado em outro sistema de gerenciamento de banco de
dados chamado de mSQL.
O MySQL rpido, flexvel e confivel. utilizado em muitos lugares por todo o
mundo.
Obs.: A propsito, parte ''AB'' do nome da companhia o acrnimo para a palavra
sueca ''aktiebolag'', ou ''sociedade annima''. Ela traduzida para ''MySQL, Inc.'' De
fato, MySQL Inc. e MySQL GmbH so exemplos de subsidirias da MySQL AB. Elas
esto localizadas nos EUA e Alemanha, respectivamente.
91
Instalando no Windows
Procure pelo formato executvel. O arquivo vem compactado no formato .zip.
Descompacte e instale. A instalao, como no poderia deixar de ser, feita por um
assistente. Siga os passos at a finalizao.
Caso sua mquina tenha o sistema operacional Windows pertencente a famlia NT( NT,
2000 ou XP), o MySQL instalado como servio. Ento basta iniciar ou parar o servio,
encontrado no Painel de Controle>Ferramentas Administrativas>Servios.
Voc tambm pode utilizar o comando pelo prompt, desde que voc saiba o nome do
servio do seu MySQL:
Para iniciar o servio
net start mysql
Para parar o servio
net stop mysql
92
cd\mysql\bin
Lembrando que voc deve estar no drive em que o MySQL est instalado. Por padro
voc o instala no drive C.
Digitando o comando a seguir voc entra no MySQL.
mysql u root -p
Tecle ENTER e receber o pedido de senha:
password
Digite a senha que voc configurou na instalao e tecle ENTER novamente.
Nota: Verses mais modernas do MySQL para o sistema operacional Windows no
necessitam de tantos passos para iniciar, bastando ir at o atalho encontrado no menu
Iniciar do sistema e no atalho do MySQL iniciar o prompt de comando encontrado neste
local.
No Linux
Se voc utilizou a instalao binria, em rpm (recomendado), basta abrir o terminal e
digitar a seqncia:
shell>mysql u root
Se j estiver logado como root, no seu sistema operacional, no h necessidade de
colocar o u root depois do comando mysql.
93
O comando USE
Depois de confirmado a criao do banco de dados, voc dever utilizar o comando
USE para utilizar o banco de dados livraria.
USE livraria;
Um ponto importante que o MySQL no torna ativo o banco de dados que voc criou,
isso deve ser implcito.
O comando DROP
O comando DROP semelhante ao comando CREATE. Enquanto o ltimo cria um
banco de dados, o primeiro exclui. O comando DROP do SQL imperdovel. No h
caixas de confirmao para ver se voc tem certeza. Este comando exclui o banco de
dados e tudo o que estiver nele.
s ir at o prompt de comando e no monitor do MySQL e digitar:
Criando tabelas
PHP 5 & MySQL 5 for Web www.integrator.com.br/php
94
O comando SHOW
Assim que criada sua primeira tabela. Para ver o resultado basta digitar a seqncia:
95
O comando DESCRIBE
Se preferir, o comando DESCRIBE faz a mesma coisa que SHOW, mostrando as
colunas existentes em sua tabela.
DESCRIBE livros;
Ou simplesmente:
DESC livros;
IF NOT EXISTS
Uma maneira de se ter certeza de se no est criando uma tabela novamente fazer o
comando IF NOT EXISTS:
96
97
Utilizando ndices
Um ndice um arquivo estruturado que facilita o acesso a dados.
Isso significa que um ndice na coluna correta aumentar a velocidade de uma consulta
consideravelmente. Um ndice trabalha da mesma forma que pastas com separador
alfabtico em um gabinete de arquivo ele permite pular para a parte do alfabeto que
voc est procurando.
Criando um ndice
Por padro, o MySQL cria um ndice se voc declara uma coluna como uma chave
primria. No h necessidade de criar um ndice nessa coluna; caso contrrio voc teria
dois ndices em uma mesma coluna.
A sintaxe para criar um ndice em uma coluna:
98
Ou...
Para alterar uma tabela eliminando uma chave primria, utilize a seguinte sintaxe:
Tipos de tabelas
O MySQL possui uma caracterstica um pouco diferente dos outros sistemas
gerenciadores de banco de dados, uma vez que no MySQL possvel escolher o tipo da
tabela no momento da criao. O formato de armazenamento dos dados, bem como
alguns recursos do banco de dados so dependentes do tipo de tabela escolhido.
A definio do tipo de tabela pode ser feita na criao da tabela, como voc pode ver a
seguir:
CREATE TABLE teste (
id INT NOT NULL,
nome VARCHAR(30) NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
99
Estas tabelas so de grande desempenho para leitura, uma vez que os seus ndices so
armazenados em rvores binrias balanceadas, o que prov um ganho para o acesso s
informaes. O MyISAM no trabalha com transaes (commit ou rollback) e tambm
no possui integridade referencial, isto , ao incluir uma chave estrangeira com alguns
constraints, esta servir apenas como documentao, mas as restries no sero
respeitadas pelo banco.
O tipo Memory
Tabelas do tipo MEMORY (conhecida anteriormente como HEAP) so armazenadas
em memria e, graas a isso, so extremamente rpidas. Em contrapartida, o seu
contedo voltil, uma vez que no so gravadas em disco. Caso haja uma queda do
SGBD os dados destas tabelas sero perdidos. Alm disto, necessrio um processo
para dar a carga inicial nos dados quando o servidor de banco iniciar e sua execuo. A
principal aplicao das tabelas MEMORY seria para tabelas que so consultadas com
muita freqncia, mas que no sofrem muitas alteraes (lookup tables).
O tipo MERGE
As tabelas do tipo MERGE so colees de tabelas MyISAM idnticas. Este recurso
permite a diviso de uma tabela grande em vrias partes menores, e ainda assim permite
acesso ao contedo de todas elas como se fossem uma nica tabela. Veja um exemplo
de como utiliz-la:
CREATE TABLE exemplo1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
exemplo VARCHAR(20)
);
CREATE TABLE exemplo2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
exemplo VARCHAR(20)
);
100
Exemplos
Exemplo1
Teste1
Exemplo2
Teste2
Resultado da Mesclagem
O tipo BDB
O tipo de tabela BDB vem de BerkeleyDB, e desenvolvido pela Sleepycat
(http://www.sleepycat.com). O tipo BDB prov ao MySQL um manipulador de tabelas
com controle de transao, dando assim a voc a possibilidade de usar os comandos
COMMIT e ROLLBACK, alm de fornecer a recuperao automtica de dados em caso
de queda do sistema. O BDB apresenta um mecanismo de lock em nvel de pgina, onde
apenas os dados de uma mesma pgina ficaro bloqueados durante um perodo de lock.
O tipo InnoDB
O tipo InnoDB do tipo de tabela transacional, desenvolvido pela InnoDBase Oy. A
partir da verso 4.0 do MySQL ele passa a ser parte integrante das distribuies do
MySQL. O InnoDB apresenta, alm da capacidade transacional, outros recursos que so
realmente teis na utilizao de tabelas:
Nveis de isolamento;
Por se tratar de um tipo de tabela com recursos mais avanados, requer mais espao em
memria e disco, alm de se apresentar, em determinadas situaes, um pouco mais
lento que tabelas do tipo MyISAM. Apesar disto, o tipo InnoDB tem se mostrado
extremamente rpido se comparado com outros SGBDs transacionais.
101
Tipo de dados
Como a maioria dos sistemas de gerenciamento de banco de dados relacional
(Relational Database Management Systems RDBMS), o MySQL tem tipos de dados
especficos de coluna.
O MySQL tem vrios tipos de dados que suportam funes diferentes. Um tipo de
dados a definio das informaes que uma coluna armazenar. Pode haver muitos
tipos de dados em uma tabela, mas cada coluna armazenar seu prprio tipo de
informaes especficas.
H quatro tipos de grupos de formatos de dados. O primeiro o numrico. O segundo
tipo o formato de caractere ou string. Esse formato consiste em letras e nmeros ou
qualquer coisa que voc coloque entre aspas. O terceiro grupo formado por datas e
horas. O tipo final uma forma de miscelnea. Ele consiste em tudo que no se encaixa
em qualquer uma das outras categorias.
Tipos numricos
Os tipos numricos destinam-se somente a nmeros. Os diferentes tipos de nmeros
ocupam uma quantidade diferente de espao na memria.
Um bom exemplo voc tentando comprar um chocolate em uma loja e ao passar no
caixa a voc descobre que deve pagar pela caixa inteira. Voc diz que no precisa de
tudo, mas atacado e s e vendido de caixa. Se voc vai utilizar 3 nmeros, por que
ocupar um espao na memria como se estivesse utilizando 100?
Lembre-se: voc s deve pagar pelo que vai usar.
Armazenamento numrico
Nome do tipo
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
FLOAT(Inteiro,Decimal)
DOUBLE(Inteiro,Decimal)
DECIMAL(Inteiro,Decimal)
Espao na memria
1 byte
2 bytes
3 bytes
4 bytes
8 bytes
4 bytes
8 bytes
O valor de bytes Inteiro + 2
102
Intervalo de valor
Sem sinal
-128 a 127
-32768 a 32767
-8388608 a 83888607
-2147483648 a 2147483647
-9223372036854775808
a
9223372036854775807
Varia dependendo dos valores
Varia dependendo dos valores
Varia dependendo dos valores
0 255
0 65535
0 - 16777215
0 - 4294967295
0 - 18446744073709550615
AUTO_INCREMENT
O modificador de coluna AUTO_INCREMENT automaticamente aumenta o valor de
uma coluna adicionando 1 ao valor mximo atual. Ele fornece um contador que timo
para criar valores nicos.
Voc tambm pode incluir um nmero. Se quiser que uma coluna
AUTO_INCREMENT inicie com 9.000, por exemplo, s declarar explicitamente um
ponto inicial utilizando a seguinte sintaxe:
UNSIGNED
UNSIGNED depois de um tipo inteiro significa que ele s pode ter um zero ou valor
positivo.
ZEROFILL
O modificador de coluna ZEROFILL utilizado para exibir zeros esquerda de um
nmero com base na largura de exibio.
Como todos os tipos de dados numricos tm uma largura de exibio opcional, se voc
declara um INT(8) ZEROFILL e o valor armazenado 23, ele ser exibido como
00000023.
Para isso utilize a seguinte sintaxe:
103
Tamanho mximo
CHAR(X)
VARCHAR(X)
TINYTEXT
TINYBLOB
TEXT
BLOB
MEDIUMTEXT
MEDIUMBLOB
LONGTEXT
LONGBLOB
255 bytes
255 bytes
255 bytes
255 bytes
65.535 bytes
65.535 bytes
1,6 MB
1,6 MB
4,2 GB
4,2 GB
Espao de
armazenamento
X bytes
X + 1 byte
X + 1 byte
X + 2 bytes
X + 2 bytes
X + 2 bytes
X + 3 bytes
X + 3 bytes
X + 4 bytes
X + 4 bytes
CHAR e VARCHAR
Fora todos esses tipos, os tipos VARCHAR e CHAR so os mais utilizados. A
diferena entre eles que o VARCHAR tem um comprimento varivel e o CHAR no.
Os tipos CHAR so utilizados para comprimentos fixos. Voc utilizar esse tipo
quando os valores no variam muito. Se voc declara um CHAR(10), todos os valores
armazenados nessa coluna tero 10 bytes de comprimento, mesmo se ele tiver 3 bytes
de comprimento. O MySQL preenche esse valor para ajustar o tamanho que foi
declarado. O tipo VARCHAR faz o contrrio. Se voc declara um VARCHAR(10) e
armazena um valor que tem somente 3 caracteres de comprimento, a quantidade total de
espao de armazenamento de 4 bytes (o comprimento mais um).
A vantagem de utilizar os tipos CHAR que as tabelas que contm esses valores fixos
so processadas mais rapidamente que aquelas que so compostas pelo tipo
VARCHAR. A desvantagem de utilizar o tipo CHAR o espao desperdiado.
De um modo geral no se pode utilizar os dois na mesma tabela, pois quando feito o
MySQL converte automaticamente uma coluna com o tipo CHAR em VARCHAR.
A nica exceo quando voc declara uma coluna como VARCHAR(3), o MySQL
converte automaticamente em CHAR(3). Isso acontece porque valores de 4 caracteres
ou menores so muito pequenos para o tipo VARCHAR.
TEXT e BLOB
TEXT e BLOB(Binary Large Object) so tipos variveis de comprimento que podem
armazenar grandes quantidades de dados. Voc utilizar esses tipos quando quiser
armazenar imagens, sons ou grandes quantidades de textos, como pginas da Web ou
104
Tipos variados
H basicamente trs tipos variados; os tipos ENUM, SET e DATE/TIME.
Tipo ENUM
O tipo ENUM uma lista ENUMerada. Significa que essa coluna pode armazenar
apenas um dos valores que esto declarados na lista dada.
A sintaxe para criar uma coluna ENUMerada como segue:
mysql> CREATE TABLE coluna_enum (
-> estados ENUM(SP,RJ,MG,RS)
-> );
Voc pode ter at 65.535 itens em sua lista enumerada. uma boa escolha para caixas
de combinao.
Tipo SET
O tipo SET muito parecido com o tipo ENUM. O tipo SET, como o tipo ENUM,
armazena uma lista de valores. A diferena que no tipo SET, voc pode escolher mais
de uma opo para armazenar. Um tipo SET pode conter at 64 itens. O tipo SET uma
boa escolha para opes em uma pgina da Web em que o usurio pode escolher mais
de um valor.
A sintaxe para criar um tipo SET:
A coluna criada seria capaz de armazenar uma ou mais escolhas, como por exemplo:
Futebol #como uma escolha
Futebol, Vdeo Game # como mais de uma escolha.
Quando se inserem os valores em uma coluna do tipo SET, se coloca entre aspas ou
apstrofos e separados por vrgula:
105
Tipos aplicveis
Todos os tipos INT
CHAR, VARCHAR
Todos, exceto BLOB, TEXT
Todos os tipos
Todos os tipos
Todos os tipos
Todos os tipos
Tipos numricos
Tipos numricos
O modificador BINARY faz com que os valores armazenados sejam tratados como
strings binrias, fazendo-os distinguir letras maisculas e minsculas. Ao classificar ou
comparar essas strings, a distino entre maisculas e minsculas ser considerada.
Por padro os tipos CHAR e VARCHAR no so armazenados como binrios.
O modificador DEFAULT permite especificar o valor de uma coluna se no existir um
valor.
Os modificadores NULL e NOT NULL especifica se na coluna deve haver um valor ou
no.
Por exemplo; se voc especificar a coluna como NOT NULL voc forado a colocar
um valor, pois esse campo requerido.
PRIMARY KEY um ndice que no deve conter valores nulos (NULL). Cada tabela
deve conter uma chave primria, isso facilita uma consulta de dados. Abordarei essa
questo mais adiante.
O modificador UNIQUE impe a regra que todos os dados dentro da coluna declarada
devem ser nicos.
Por exemplo; se voc declarar (no faa isso) que a coluna nome deve ser
UNIQUE(nica), no pode haver valores duplicados, caso contrrio gerar um erro.
A sintaxe para sua criao :
106
1000-01-01 a 9999-12-31
TIME
-838:59:59 a 838:59:59
1000-01-01 00:00:00 a
9999-12-31 23:59:59
TIMESTAMP[(F)] 1970-01-01 00:00:00
DATETIME
YEAR[(2 | 4)]
70-69 (1970-2069)
1901-2155
Descrio
Datas. Ser exibida como YYYYMM-DD
Hora.
Ser
exibida
como
HH:MM:SS
Data e Hora. Ser exibida como
YYYY-MM-DD HH:MM:SS
Um registro de data/hora, til para
relatrio de transao. O formato de
exibio depende do formato de F.
Um ano. Voc pode especificar 2 ou
4 formatos de dgitos. Cada um
desses tem um intervalo diferente,
como mostrado.
Comando INSERT
O comando INSERT INTO adiciona dados em uma tabela.
A sua sintaxe :
O nome da tabela em que voc ir inserir dever ser declarada logo no incio INSIRA
DENTRO nomedatabela (colunas) VALORES (valores inseridos dentro de cada
coluna);
importante salientar que strings ficam entre aspas ou apstrofos e valores numricos
(declarados como tipo de dados numricos) no precisam de aspas ou apstrofos.
Para inserir mais de um valor separe-os por vrgula:
Comando SELECT
PHP 5 & MySQL 5 for Web www.integrator.com.br/php
107
Nesse caso foi colocada uma condio que dentre todos os registros s dever aparecer
os dados ONDE a coluna ISBN for igual '85-7585-120-5'.
A clusula WHERE especifica o critrio utilizado para selecionar linhas particulares. O
nico sinal igual utilizado para testar igualdade observe que isso diferente do Java
e fcil se confundir.
Alm da igualdade, o MySQL suporta um conjunto completo de operadores e
expresses regulares. Na tabela a seguir esto listadas as mais utilizadas por voc:
Tabela de Operadores no MySQL
Operador Nome
Exemplos
=
igual
autor_id = 1
>
maior que
Quantidade > 50
<
menor que
Quantidade < 50
>=
maior
ou Quantidade >= 50
igual a
menor
ou Quantidade <= 50
igual a
diferente de Quantidade !=0
<=
!= ou <>
IN
NOT IN
IS NOT
IS NULL
BETWEEN
Endereo
no nulo
Endereo promocao is null
nulo
valor BETWEEN 200 AND 350
Quantidade
Descrio
Testa se os dois valores
so iguais
Testa se um valor maior
que o outro
Testa se um valor menor
que o outro
Testa se um valor maior
ou igual ao outro
Testa se um valor menor
ou igual ao outro
Testa se um valor
diferente do outro
Testa se o valor est em
um conjunto particular
Testa se o valor no est
em um conjunto particular
Testa se o campo no
contm um valor
Testa se o campo tem
108
MIN( )
SELECT MIN(coluna) FROM tabela;
O contrrio de MAX, retorna o valor mnimo de uma coluna.
LIMIT
SELECT * FROM tabela LIMIT 2;
Limita a visualizao de 2 linhas de dados.
SELECT * FROM tabela LIMIT 2,5;
Limita a visualizao da linha 2 a linha 5 de dados.
COUNT( )
SELECT COUNT(coluna) FROM tabela;
Conta quantas linhas de dados existem na coluna nome.
SELECT COUNT(*) FROM tabela;
Conta quantas linhas de dados existem em todas as linhas.
Nota: Em caso de fazer a contagem em campo de valor NULL a contagem ser
diferente da no valor total.
SUM( )
SELECT SUM(coluna) FROM tabela;
Soma todos os dados da coluna.
109
AVG( )
SELECT AVG(coluna) FROM tabela;
Faz a mdia aritmtica da coluna designada.
LIKE
mysql>SELECT * FROM livros WHERE titulo LIKE Java%;
Neste caso pode-se fazer uma busca por apenas a inicial do valor desejado.
O sinal de %(porcentagem) o caractere curinga que significa qualquer caractere.
Comando UPDATE
O comando UPDATE permite editar os valores de dados existentes. A sintaxe para
110
Comando DELETE
A instruo DELETE muito semelhante instruo SELECT. A nica diferena em
vez de selecionar registros para visualizar, essa instruo exclui esses registros.
A instruo DELETE tem a seguinte sintaxe:
DELETE FROM tabela WHERE coluna=valor;
Princpios da Chave
Imagine que voc tem uma coleo muito simples de dados em que armazena apenas os
dados teis simples. Por exemplo, voc talvez crie uma tabela de Clientes semelhante
a um antigo arquivo de ndice de fixas, com nome e detalhes de um cliente em cada
ficha. Quando quiser pesquisar um cliente, voc procura o arquivo e l cada ficha
sucessivamente. Ao ver a(s) ficha(s) que quer, voc l essas informaes teis como o
nome, endereo e nmero de telefone do cliente.
111
ADD
PRIMARY
KEY
nome_do_ndice
INDEX
[nome_do_ndice]
ON
nome_tabela
112
Chaves primrias
Uma chave primria semelhante em princpio a uma chave nica, seus dados devem
ser nicos, mas a chave primria de uma tabela tem um status mais privilegiado. Apenas
uma chave primria pode existir para cada tabela e seus valores de campo nunca podem
ser nulos.
Uma chave primria geralmente utilizada como um link estrutural no banco de dados,
definindo o relacionamento entre as tabelas diferentes. Sempre que quiser unir uma
tabela a outra, voc deve ter a chave primria dessa tabela.
O MySQL no requer que voc especifique que a coluna em que estiver a chave
primria seja NOT NULL(no nula) *, mas porm se tentar colocar um valor idntico
na coluna chave, esta retornar um erro que no pode haver duplicao.
* Este caso somente para chaves primrias em tabelas cuja coluna selecionada seja
INT ou semelhante. Em casos de ser VARCHAR, CHAR e etc, exigida a utilizao do
NOT NULL. Caso isso no ocorra, voc ter como resultado um erro. Se desejar que
seja nulo o campo, coloque uma chave UNIQUE.
Chaves estrangeiras
As chaves estrangeiras so atualmente suportadas no MySQL em outro formato de
tabela. A mais usada e recomenda para transaes chamada de InnoDB.
A seguir voc tem o comando necessrio para criar uma chave estrangeira no seu banco
de dados:
ALTER TABLE publicacao ADD CONSTRAINT FK_publicacao
FOREIGN KEY (isbn) REFERENCES
livros (isbn) ON DELETE CASCADE ON UPDATE CASCADE;
Transaes
Transaes so mecanismos que asseguram consistncia no banco de dados,
especialmente no caso de erro ou queda no servidor.
113
Stored Procedures
Stored Procedures (procedimentos armazenados) passou a ser suportado pelo MySQL
na verso 5. Agora, alm do poder da velocidade desse incrvel banco de dados, voc
tambm pode armazenar rotinas e cham-las quando necessitar.
As stored procedures pode consistir em declaraes de SQL e vrias estruturas de
controle especiais. Isto pode ser til quando voc quiser executar a mesma funo de
aplicaes diferentes ou plataformas, ou como um modo de encapsular funcionalidade.
114
Criando Views
Uma view pode ser pensada de como uma " query " armazenada. Uma view definida
cria essencialmente uma definio nomeada para uma declarao SQL que pode ser
ento referenciada como uma tabela em outras declaraes SQL.
uma complexa definio para uma situao simples, aqui voc armazena a query e
depois a chama pelo nome (fcil n?).
Para criar uma view, execute o comando a seguir:
CREATE OR REPLACE VIEW
vw_livros(nome,titulo,ano_publicacao,editora_nome) AS
SELECT nome, titulo,
ano_publicacao, editora_nome
FROM autores
115
116
Administrando o MySQL
Um sistema de MySQL pode ter muitos usurios. O usurio root geralmente deve ser
utilizado somente para propsitos de administrao, por razes de segurana. Para cada
usurio que precisar utilizar o sistema, voc precisar configurar uma conta e senha.
No obrigatrio configurar senhas para usurios, mas recomendo que voc configure
senhas para todos os usurios que forem criados.
Configurando usurios
Os comandos GRANT e REVOKE so utilizados para fornecer e retirar direitos dos
usurios do MySQL. Ele pode ser concedido nos seguintes nveis:
Global
117
Com isso voc concede todos os privilgios de manipulao do banco de dados livraria
somente ao usurio edson, com a senha integrator.
Revogando privilgios
Para revogar esse privilgio voc deve fazer o seguinte comando:
118
119
120
121
122
123
}
//com sprintf voc pode trabalhar com strings
//essa funo retorna string formatado
124
}
else{
$msg= "Foi atualizada " . mysql_affected_rows() . " linha<br />";
//destri as variveis criadas para receber os dados
unset($isbn,$titulo,$edicao,$publicacao,$descricao);
}
}
catch (Exception $e)
{
//caso haja uma exceo mensagem capturada e atribuda a $msg
$msg = $e->getMessage( );
}
}
$rs=mysql_query("SELECT * FROM livros");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Atualizao de Livros</title>
</head>
<body>
<?php
//verifica se existe a varivel $msg
if(isset($msg))
echo $msg;
?>
<p>
<table width="489" border="1" cellspacing="0" cellpadding="0">
<tr>
<th width="109" align="left">ISBN</th>
<th width="202" align="left">Ttulo</th>
125
126
127
Caso no haja um erro, o cdigo segue, onde executada a instruo SQL UPDATE,
que dessa vez fora chamada com a funo sprintf, que captura os strings e os retorna
formatados.
Na execuo da QUERY, novamente uma verificao feita para evitar erros, que se
houver, dispara tambm uma EXCEO. Caso no dispare, uma mensagem dada ao
usurio indicando que os dados foram atualizados com sucesso.
Abaixo da TABELA feita uma verificao para que seja exibido ou no o
FORMULRIO. A verificao feita atravs de $_SERVER['QUERY_STRING'] e
pelo valor da varivel $isbn. Se voc se lembrar, QUERY_STRING exibe os
resultados passados pelo cabealho HTTP, usados aps o smbolo de consulta ?. Esse
o mtodo usado para o envio do cdigo ISBN do livro para executar a atualizao.
Um outro mtodo aparecera, chamado de mysql_num_rows( ), capaz de capturar o
nmero de linhas vindos de uma instruo SQL SELECT. O mtodo
mysql_affected_rows( ) no foi utilizado porque ele no funciona com a instruo
SELECT. Se o resultado for igual a ZERO, quer dizer que no existe o ISBN
procurado, fazendo com que seja disparada uma exceo.
128
129
130
?>
131
132
133
134
135
id="form1"
name="form1"
method="post"
action="<?php
echo
136
Excluindo autores
Para excluir os autores, voc ir criar um procedimento para executar essa ao:
DELIMITER $$
CREATE PROCEDURE sp_del_autor(in_id INT)
BEGIN
DELETE FROM autores WHERE autor_id=in_id;
END $$
DELIMITER ;
137
}
catch(Exception $e){
//caso haja uma exceo mensagem capturada e atribuda a $msg
$msg = $e->getMessage();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Excluir Autores</title>
</head>
<body>
<?php
//verifica se existe a varivel $msg
if(isset($msg))
echo $msg;
?>
138
139
manip_arq.php
140
141
142
143
Arquivos de Excel
Para criar um arquivo que tenha como sada o formato do Excel, ou xls, voc
inicialmente precisa ter a formatao padro usada por ele. Isso fcil de se conhecer,
bastando apenas export-lo no formato XML. Com os headers a seguir, voc tem a
possibilidade de ter a sada para download.
<?php
header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
header ( "Pragma: no-cache" );
header ( "Content-type: application/x-msexcel" );
header ( "Content-Disposition: attachment; filename=arquivo.xls" );
header ( "Content-Description: PHP Generated XLS Data" );
?>
O cdigo a seguir demonstra como funciona um documento com sada em formato XLS
(MS Excel), com dados vindos do banco de dados.
Uma situao crtica que deve ser observada est em ss:ExpandedRowCount, em
destaque a seguir. Isso porque voc tem que passar ao arquivo o nmero de linhas
correto. Caso no o faa, um erro ocorre.
<?php
header( "content-type: text/xml" );
header ( "Expires: Mon, 1 Apr 1974 05:00:00 GMT" );
header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
header ( "Pragma: no-cache" );
header ( "Content-type: application/x-msexcel" );
header ( "Content-Disposition: attachment; filename=arquivo.xls" );
header ( "Content-Description: PHP Generated XLS Data" );
//conecta ao banco de dados
$conexao=mysql_connect("localhost","edson","integrator");
//acessa o banco de dados desejado
$banco=mysql_select_db("livraria");
//seleciona os dados da tabela
$sql = "SELECT * FROM livros";
$resultado = mysql_query($sql);
$nr=mysql_num_rows($resultado); //conta o nmero de linhas encontradas
//colocado em PHP para evitar erros de interpretao pelo servidor
echo( "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n" );
echo( "<?mso-application progid=\"Excel.Sheet\"?>\n" );
?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
144
145
Edio N. Publicado em
<<edicao>> <<publicado>>
A seguir voc tem um exemplo de listagem dos livros simples, para que seja atravs
desse arquivo a chamada para o outro que ir gerar o RTF com os novos dados:
<?php
try{
//conecta ao banco de dados
$conexao=mysql_connect("localhost","edson","integrator");
//acessa o banco de dados desejado
$banco=mysql_select_db("livraria");
$rs = mysql_query("SELECT * FROM livros");
if(!$rs)
throw new Exception('Problemas: '.mysql_error().'<br />');
}
catch(Exception $e){
//caso haja uma exceo a mensagem capturada e atribuida a $msg
$msg = $e->getMessage();
}
?>
146
147
148
?>
gerarRTF.php
149
O que AJAX?
AJAX carregar e renderizar uma pgina, utilizando recursos de scripts rodando pelo
lado cliente, buscando e carregando dados em background sem a necessidade de reload
da pgina.
AJAX acrnimo para: Asynchronous JavaScript And XML e foi gerado por Jesse
James
Garret,
em
um
artigo
no
site
http://www.adaptivepath.com/publications/essays/archives/000385.php, da sua empresa
Adaptive Path, em fevereiro de 2005.
Ajax no uma tecnologia, mas sim um conjunto de tecnologias. O conceito de AJAX
se resume em conhecer bem JavaScript, trabalhando com DOM (Document Object
Model), CSS (Cascading Style Sheets) e XML.
Opera 8
Mozilla e Firefox
Konqueror
Safari
150
151
}
mensagem( "Dados carregados" );
document.getElementById('isbn').innerHTML=isbn;
document.getElementById('titulo').innerHTML=titulo;
document.getElementById('edicao').innerHTML=edicao;
document.getElementById('publicacao').innerHTML=publicacao;
}
}//end function processXML
function mensagem(msg){
document.getElementById('mensagem').innerHTML=msg;
}//end function mensagem
</script>
</head>
<body>
<?php
//verifica se existe a varivel $msg
if(isset($msg))
echo $msg;
152
livro.php
<?php
//conexao ao mysql
$conexao=mysql_connect("localhost","edson","integrator");
//acessa o banco de dados desejado
$banco=mysql_select_db("livraria");
153
Entendendo o AJAX
Para ter a forma com que o objeto XMLHttpRequest vai trabalhar, voc tem que alterar
o terceiro parmetro do mtodo open.
Com esse parmetro em true, no terceiro parmetro do mtodo open, coloca o objeto em
modo assncrono.
154
155
Inetd mode is
Diz ao sistema se o httpd vai ser rodado via script prprio (standalone), ou a
partir do arquivo inetd.conf (inetd). (em "inetd" o httpd fica ocioso, enquanto o
inetd fica monitorando as requisies, quando houver alguma, ele avisa e o
servio comea a funcionar)
#
# ServerRoot: The top of the directory tree under which the
server's
# configuration, error, and log files are kept.
#
# NOTE! If you intend to place this on an NFS (or otherwise
network)
# mounted filesystem then please read the LockFile
documentation
# (available at
http://www.apache.org/docs/mod/core.html#lockfile);
# you will save yourself a lot of trouble.
#
# Do NOT add a slash at the end of the directory path.
156
Esta cuida do caminho do diretrio onde iro ficar os arquivos de configurao. Pode
ser mudado se necessrio.
#
# Timeout: The number of seconds before receives and sends
time out.
#
Timeout 300
Tempo mximo (em segundos) que o servidor esperar, mantendo uma conexo aberta
com o cliente. Se o limite for excedido, ele ter de criar uma nova conexo com o
mesmo.
#
# KeepAlive: Whether or not to allow persistent connections
(more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
Diretamente ligado com a opo acima, define se o processo de manter a conexo com o
cliente est ativo ou no.
#
# MaxKeepAliveRequests: The maximum number of requests to
allow
# during a persistent connection. Set to 0 to allow an
unlimited amount.
# We recommend you leave this number high, for maximum
performance.
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: Number of seconds to wait for the next
request from the
# same client on the same connection.
#
KeepAliveTimeout 15
157
#
# BindAddress: You can support virtual hosts with this
option. This
# directive
# is used to tell the server which IP address to listen to.
It can either
# contain "*", an IP address, or a fully qualified Internet
domain name.
# See also the <VirtualHost> and Listen directives.
#
BindAddress 192.168.255.108:80
Esse importante. Por default a linha BindAddress vem comentada pois como est
apresentada acima, habilita o acesso a um domnio virtual (em nosso caso, o ip
192.168.255.108:80 (o :80 seria indicando a porta 80) que ser explicado mais alm.
Para cada virtual host, necessria uma entrada "BindAddress e um nmero ip"
158
O httpd responde por default na porta 80, neste campo voc poder modific-la se
quiser.
#
# ServerAdmin: Your address, where problems with the server
should be
# e-mailed. This address appears on some server-generated
pages, such
# as error documents.
#
ServerAdmin root@localhost
159
#
# DocumentRoot: The directory out of which you will serve
your
# documents. By default, all requests are taken from this
directory, but
# symbolic links and aliases may be used to point to other
locations.
#
DocumentRoot "/html"
160
Esta opo bem til. Cuida de qual diretrio o usurio ter de fazer, se quiser ter uma
pgina em seu home. No caso, como est configurado, ele precisar criar um diretrio
public_html (o nome pode ser alterado no campo acima) e colocar algo em html ali,
podendo ser acessado com http://nome.da.maquina/~nome-do-usurio. IMPORTANTE:
COMO MENCIONADO ANTERIORMENTE, ESTE E TODOS OS DIRETRIO
ANTERIORES PRECISAM TER PERMISSES 755 AFIM DE GARANTIR
ACESSO.
161
Esta opo coordena os direitos de acesso ao diretrio public_html dos usurios e vem
por padro, comentada. No caso voc deve descomenta-la e modific-la de acordo com
o diretrio home de seus usurios (por exemplo, o campo <Directory
/home/*/public_html> diz que, no diretrio /home, todos que existem dentro dele e que
tenham public_html vo ser passveis de acesso, sob as regras configuradas abaixo desta
linha.
#
# DirectoryIndex: Name of the file or files to use as a prewritten HTML
# directory index. Separate multiple entries with spaces.
#
DirectoryIndex index.html index.htm index.cgi
Esta bastante importante tambm pois determina quais nomes de arquivos sero
vlidos para realizar-se a abertura dos mesmos em um browser http. No caso da
configurao acima, o server aceitar arquivos de nome index.html, index.htm e
index.cgi como arquivos iniciais de uma home page.
#
# UseCanonicalName: (new for 1.3) With this setting turned
on, whenever
# Apache needs to construct a self-referencing URL (a URL
that refers back
# to the server the response is coming from) it will use
ServerName and
# Port to form a "canonical" name. With this setting off,
Apache will
# use the hostname:port that the client supplied, when
possible. This
# also affects SERVER_NAME and SERVER_PORT in CGI scripts.
#
UseCanonicalName On
162
Neste, configuramos o ip e porta que o servidor virtual ter. A definio deste que
voc no precisa ter vrios computadores rodando http servers neles, com apenas um
voc pode ter www.teste.com e www.teste1.com, cada um abrindo uma pgina diferente
(em diferentes diretrios do cpu) e cada um possuindo um ip (mas ambos apontaro
para o mesmo cpu, isso se chama IP ALIAS).
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost
container.
#
#<VirtualHost ip.address.of.host.some_domain.com>
#
ServerAdmin webmaster@host.some_domain.com
#
DocumentRoot /www/docs/host.some_domain.com
#
ServerName host.some_domain.com
#
ErrorLog logs/host.some_domain.com-error_log
#
CustomLog logs/host.some_domain.com-access_log common
#</VirtualHost>
<VirtualHost teste:80>
ServerAdmin webmaster@host.some_domain.com
DocumentRoot /vh
ServerName teste.suptel
ErrorLog logs/host.some_domain.com-error_log
CustomLog logs/host.some_domain.com-access_log common
</VirtualHost>
Esta a ltima mas no menos importante das configuraes bsicas do apache. Ela
cuida do servidor virtual e de suas configuraes, sendo que o que est comentado (com
um # na frente) d um exemplo do que dever ser feito (as linhas descomentadas no
esto escritas por padro, estas apresentadas foram digitadas com base no exemplo).
Explicarei cada uma delas:
<VirtualHost teste:80>
163
e aps:
[root@localhost /init.d]# ./httpd stop
[root@localhost /init.d]# ./httpd start
Depois, necessrio informar ao sistema que o mesmo precisa responder num outro ip
(192.168.255.108 como definido nas configuraes do virtual host) alm do ip
verdadeiro (pois um virtual host no nada mais do que fazer um computador responder
em outro ip (e outro nome, se assim especificado no dns), direcionando o pedido http
para este ip "falso" e associando a pasta de htmls referida ao mesmo).
Vamos utilizar ento o linuxconf para adicionar este ip "falso" (tcnica chamada de IP
ALIAS, anteriormente mencionada).
Entre como root no linuxconf:
[root@localhost]# linuxconf
V em:
Ambiente de Rede -->
Apelidos de IP para mquinas virtuais -->
eth0 -->
configure o ip virtual (no caso do nosso, seria
192.168.255.108) e sua
mscara.
Depois:
Aceitar
Sair
Sair
Sair
Ativar as mudanas
164
O primeiro tem que estar respondendo no documento html vlido na pasta /html e o
segundo na /vh.
Para uma pgina no home do usurio, digite (aps o usurio ter criado a pasta
public_html em seu home e ter dado permisses 755 para a mesma).
http://nome-da-maquina/~nome-do-usurio
165
166