|
Os Erros de PHP que Você Não Viu Ainda
por Éder Baum
Neste artigo mostrarei alguns erros que não aparecem por padrão nas mensagens de erro do PHP, mas que podem ser as vezes potencialmente perigosos. Irei demonstrar como abilitar esses errors, e o motivo dos errors/alertas mais comuns.
|
O PHP em si é uma linguagem muito “boazinha” e condizente com certos desleixos de nossa parte. Mas às vezes surgem certas mudanças pequeninas no padrão PHP que nos deixam de cabelo em pé por nosso próprio desleixo.
Tivemos a pouco tempo um exemplo disso quando register_globals passou a ser por padrão ON. Até hoje muitíssimos programas só rodam com register_globals em OFF, e não são poucos.
Mas o ponto que eu quero chegar é na opção do php.ini “error_reporting”. Mas não vou falar propriamente dela operando no arquivo ini, até porque não gosto de ter que depender dele, pois nem sempre podemos alterá-lo dependendo do servidor que temos em mão.
Neste parâmetro são colocados quais os erros do script serão reportados. Nas próximas linhas deste artigo você pode levar um susto.
Pegue um Script seu, de preferência daqueles grandões e na primeira linha de código ponha o seguinte:
<?php
error_reporting(E_ALL);
?>
|
Agora rode seu script PHP.
Se nada de diferente aconteceu, parabéns seu script está perfeito e você pode até se quiser esquecer este artigo. Caso ocorreu vários erros ou alertas, comece a chorar pois de agora em diante vai doer.
Com esta linha de código você disse ao PHP para mostrar todos os erros que aparecem no seu script, a maioria que você nem sabia que existiam. Bom, depois de analisar um pouco você pode pensar: “Ahhh, que se dane, vou deixar isso assim mesmo”. Concordo que seria um parto você ter que re-escrever seu script com milhares de linhas de código só pra ele ficar “bonitinho”, mas e seus scripts de agora em diante?
Já levei muita paulada na cabeça por não observar uma frase que um amigo meu sempre diz “Se tiver que fazer faça!”.
Imagine se um dia os doidões da Zend resolverem colocar error_reporting(E_ALL); como default assim como ocorreu algo parecido com register_globals? Ai o bicho pega, e quem vai pagar a conta é com você, sem falar que agora sempre vai ter um martelo na sua cabeça dizendo que seu script pode ter problemas graves.
Independente disso vou descrever na próxima página alguns dos erros mais comuns que você vai ver no seu script.
Notice: Undefined variable: teste in C:\Web\index.php on line 19
O mais popular de todos. É quando você usa uma variável que não foi definida tipo:
É como se você conversa-se com joão sem ele existir. Este erro é potencialmente perigoso, pois algum engraçadinho pode aproveitar-se e inserir valores de váriaveis no seu script através dom modos $_GET ou $_POST. Então simples, antes usar uma variável ela deve existir tipo:
<?php
$teste = “Olá Mundo”;
echo $teste;
?>
|
Notice: Use of undefined constant CONSTANTE - assumed 'CONSTANTE' in C:\Web\index.php on line 19
Igual ao 1º erro descrito, porém aqui ao invés de uma variável usamos uma constante que não foi definida.
Notice: Use of undefined constant one - assumed 'one' in C:\Web\index.php on line 19
É quando você chama um array elemento de um array assoociativo e não põem aspas no seu indexador, do tipo:
<?php
$array = array('one' => 1, 'two' => 2);
echo $array[one];
?>
|
Isto ocorre pois o PHP pensa que one seria uma constante que existe em seu script, então o correto seria assim:
<?php
$array = array('one' => 1, 'two' => 2);
echo $array[‘one’];
?>
|
Percebeu as aspas no final?
Notice: Undefined index: pages in C:\Web\index.php on line 19
É quando você chama um index que não existe em um array, tipo:
<?php
$array = array('one' => 1, 'two' => 2);
echo $array[‘four’];
?>
|
Notice: Undefined offset: 3 in C:\Web\index.php on line 19
Isto é porque você chamou um membro de um array que não foi definido, tipo:
<?php
$array = array('one' , 'two');
echo $array[3];
?>
|
Percebeu? Ahhh em caso de arrays onde a chave é numérica não presisa aspas :+D
Uhhhh, mas existem muitos outros que você vai ver no decorrer da coisa. Mas pra finalizar:
- Não se desespere pelo menos 90% dos scripts disponíveis pela net tem esses erros, então não estamos sozinhos neste barco.
- Dê uma olhada nesta página do PHP, que fala um pouco sobre a função error_reporting: http://br.php.net/manual/en/function.error-reporting.php
- Pra deixar você mais desesperado ainda caso use a classe Smarty, insira esta linha de código: $smarty->debugging = 1;
- Use em todos seus scripts de agora em diante a linha de código error_reporting(E_ALL), ou sete isto no php.ini, assim seus scripts de agora em diante sairão com menos erros
Espero que tenha ajudado!
|
|
|