[DICA] As Mensagens de Erros Mais Comuns do PHP

  • rldesign
  • Avatar de rldesign Autor do Tópico
  • Offline
  • JCB! Hero
  • JCB! Hero
Mais
14 anos 1 mês atrás #53747 por rldesign
rldesign created the topic: [DICA] As Mensagens de Erros Mais Comuns do PHP
As linguagens de programação geram mensagens de erros e warnings, que sempre informam o problema presente no código-fonte

Porém, poucos programadores iniciantes analisam essas mensagens, seja por falta de conhecimento ou preguiça mesmo. Ou até medo…

Vou mostrar aqui as mensagens de erro mais frequentes do PHP, junto com suas principais causas e soluções.


Habilitando todas as mensagens de erro

Antes de tudo, é bom saber que o PHP é muito personalizável – o que às vezes pode ser um problema. É possível desabilitar todas as mensagens de erro, ou limitar somente a alguns níveis de erro. Não vou explicar os níveis de erro do PHP, pois não é o foco do texto. Porém deixarei links para referência.

Para habilitar todas as mensagens de erro do PHP, basta inserir este trecho no início do script:
ini_set( 'display_errors', 1 );
error_reporting( E_ALL | E_STRICT );



Parse Error

Parse Errors ocorrem quando seu código possui erros de formatação, como caractere faltando ou em excesso.
<?php
phpinfo);
?>

Retornará o erro:
Parse error:  syntax error, unexpected ')' in teste.php on line 2

A correção é sempre muito simples: analisar a linha onde o erro ocorre e procurar o acarctere indicado pelo erro. Pode estar faltando algo ou sobrando alguma coisa. Note que o erro pode não estra na linha indicada pela mensagem de erro. Pode estar na anterior. Por exemplo:

A mensagem diz que há erro na linha 3, mas é a linha 2 que gera problema, devido à falta do ponto-e-vírgula no final do echo.


Undefined Index

Esse erro ocorre quando tenta-se acessar um índice inexistente de um array. Esse erro é muito comum com iniciantes usando Query String. O famoso exemplo:
<?php
$pag = $_GET&#91;'pag'&#93;;
?>

Se não existe a variável “pag” na URL, dará este erro:
PHP Notice:  Undefined index: pag in teste.php on line 2

Para evitar esse erro, sempre verifique se o índice existe. A função isset resolve facilmente esse problema:
if ( isset( $_GET&#91;'pag'&#93; ) )
{
    $pag = $_GET&#91;'pag'&#93;;
}
else
{
    $pag = 'valor padrão';
}

O código pode ser reescrito sda seguinte forma, usando o Operador Condicional Ternário:
$pag = isset( $_GET&#91;'pag'&#93; ) ? $_GET&#91;'pag'&#93; : 'valor_padrao';


Undefined Variable

Como o erro mostra claramente, isso ocorre quando se tenta usar uma variável não declarada (ou definida, no caso do PHP).
<?php
echo $var;
?>

Erro:
PHP Notice:  Undefined variable: var in teste.php on line 2

A solução não poderia der outra: criar a variável antes de usá-la.
Logicamente, o erro pode ter ocorrido por um erro de digitação do nome da variável.


Cannot modify header information

ssa mensagem de erro está ligada a envio de cabeçalhos HTTP, o que envolve sessions, cookies, a própria função header, do PHP.

O envio de cabeçalhos HTTP devem ser realizados sempre antes de qualquer saída ao navegador, ou seja, sempre antes de códigos HTML e funções que exibam dados, como echo, print, print_r etc. Também não pode haver espaços vazios no código, antes da tag <?.

O membro hinom, do iMasters Fóruns, escreveu um excelente tutorial sobre isso, que pode ser visto no link abaixo:
http://forum.imasters.com.br/index.php?/topic/342563-dicas-para-uso-de-variaveis-de-sessao



Call to undefined function

Novamente, o erro é claro: foi feita uma chamada a uma função não definida.

<?php
beraldo();
?>


Erro:
Fatal error:  Call to undefined function beraldo() in teste.php on line 2

Para corrigir, defina a função. Pode ter havido erro de digitação do nome da função ou falta de inclusão do arquivo que a define.


Class not found

Ocorre quando o PHP não encontra a classe que se deseja instanciar.
<?php
$b = new Beraldo();
?>

Erro:
Fatal error:  Class 'beraldo' not found in teste.php on line 2

Como no erro anterior, a solução é declarar a classe, além de verificar se não houve erro de digitação ou falta de inclusão de arquivo.


Call to undefined method

Ocorre quando se chama um método inexistente de uma classe.
<?php
 
class Beraldo
{
	public function darOi()
	{
		echo "oi";
	}
}
 
$Beraldo = new Beraldo();
$Beraldo->darTchau();
 
?>

Erro:
Fatal error:  Call to undefined method Beraldo::darTchau() in teste.php on line 12

Deve-se criar o método ou verificar se não houve erro de digitação do nome do método.


Call to a member function on a non-object

Isso ocorre quando se chama um método em uma variável que não é uma instância de um objeto.
<?php
$var = 'oi, sou uma string';
$var->metodo();
?>

Erro:

Fatal error: Call to a member function metodo() on a non-object in teste.php on line 3

Para solucionar o erro, verifique se não usou a variável errada ou se não modificou o valor original da variável, de forma a ter perdido a instância do objeto.


supplied argument is not a valid MySQL result resource

Esse erro ocorre quando uma função espera, como parâmetro, um resource retornado por outra função do MySQL. O mais comum é ocorrer erro na linha onde há a função mysql_fetch_assoc(), mysql_fetch_array() e semlhantes. Isso quer dizer que o parâmetro passado não é um resource retornado por mysql_query(), o que indica que a consulta falhou e mysql_query() retornou FALSE.

Mensagem de erro:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...

A solução é corrigir a query executada. Muitas vezes o erro é simples, apenas nome de tabela ou campo errados, ou erro de sintaxe. Para visualizar o erro retornado pelo MySQL, pode-se usar a função mysql_error(). Logo, deve-se executar a consulta desta maneira:
$exec = mysql_query( $sua_consulta_aqui ) or exit( mysql_error() );

Caso a consulta falhe, ou seja, mysql_query retorne FALSE, a função exit() finalizará a execução do script, mostrando o erro do MySQL, devido à função mysql_error(). Ler a mensagem de erro ajuda a encontrar o erro na consulta SQL.

OBS: Mostrei exemplo usando MySQL, mas recomendo fortemente que seja usada a extensão MySQLi, que é bem mais completa, além de prover recuersos novos do MySQL 4.1.


Invalid argument supplied for foreach()


Esse erro ocorre quando o argumento passado para o loop foreach não é um array.
<?php
$var = '';
foreach ( $var as $k )
{
	echo $k;
}
?>

Erro:
Warning:  Invalid argument supplied for foreach() in teste.php on line 3

Como $var é uma string, foi gerado o erro. Para corrigir, basta verificar se o parâmetro está correto ou se ele não foi modificado durante a execução do script, deixando de ser um array.


Conclusão

As mensagens de erros geralmente são muito claras. Portanto, leia-as atentamente antes de perguntar para alguém ou criar um tópico em um fórum só para isso. Muitas vezes os erros são de fácil correção, bastando ler com cuidado das mensagens de erro.

Se não conseguir, faça uma busca no nosso forum a procura da mesma mensagem.
Mesmo assim, se não resolver, ai crie um tópico com o problema.

Fonte: http://goo.gl/61xI7

Rafael Santana
Web Designer | R&L Design - Desenvolvimento Gráfico e Sites

Please Entrar ou Registrar to join the conversation.