[DICA] As Mensagens de Erros Mais Comuns do PHP
- rldesign
-
Autor do Tópico
- Offline
- JCB! Hero
-
Menos
Mais
14 anos 1 mês atrás #53747
por rldesign
Rafael Santana
Web Designer | R&L Design - Desenvolvimento Gráfico e Sites
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:
Parse Error
Parse Errors ocorrem quando seu código possui erros de formatação, como caractere faltando ou em excesso.
Retornará o erro:
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:
Se não existe a variável “pag” na URL, dará este erro:
Para evitar esse erro, sempre verifique se o índice existe. A função isset resolve facilmente esse problema:
O código pode ser reescrito sda seguinte forma, usando o Operador Condicional Ternário:
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).
Erro:
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.
Erro:
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.
Erro:
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.
Erro:
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.
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:
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:
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.
Erro:
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
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['pag'];
?>
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['pag'] ) )
{
$pag = $_GET['pag'];
}
else
{
$pag = 'valor padrão';
}
O código pode ser reescrito sda seguinte forma, usando o Operador Condicional Ternário:
$pag = isset( $_GET['pag'] ) ? $_GET['pag'] : '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.