Entendendo e interpretando erros em scripts PHP

Aviso importante!

Eu sei que você não quer ver propagandas, porém o conteúdo gratuito só está aqui graças a publicidade. Considere desativar o AdBlock para esse site.

Primeiramente gostaria que todos entendessem este post como uma forma de melhorar a técnica e lógica de todos os programadores, e não como uma represália ou retaliação à postagem de novos comentários.

Vejo com muita frequência "programadores" postarem erros em blogs ou fóruns e depois simplesmente ficam sentados à espera de uma resposta. Quem quer ser programador (sem aspas), deve aprender a interpretar os erros para encontrar a solução, e não ficar dependente de outras pessoas para solucionar qualquer tela anormal que aparece na execução de um sistema.

A propósito, você fez nosso curso GRÁTIS de PHP? Clique aqui para conhecer.

Tipos de erros mais comuns

A primeira coisa que precisa ficar clara, é a diferença entre NOTICE, WARNING e ERROR, então vamos explicar um pouco sobre cada um deles:

  • Notice: indica que alguma regra da linguagem não está sendo seguida a risca, por exemplo tentar dar um ECHO em uma variável que não foi definida anteriormente. Um notice não impede a execução do script, é apenas um aviso.
  • Warning: são alertas de erros não considerados fatais, ou seja, o PHP irá lhe informar sobre o ocorrido mas continuará executando o restante do script normalmente. Geralmente são originados por inclusão (include) de arquivos inexistentes ou chamadas de métodos sem os devidos argumentos.
  • Error: o mais grave de todos e que impede a execução do restante do código. Temos basicamente dois tipos de erros mais comuns, os FATAIS (instanciar uma classe não existente por exemplo) e os de PARSE (geralmente erros de sintaxe, ou seja, escrita incorreta de comandos).

Agora que já sabemos diferenciar cada um deles, tem outro detalhe importante: em um servidor de produção (onde a aplicação será executada) nunca devem ser mostrados NOTICES e WARNINGS, pois estes avisos são exclusivos para o desenvolvimento do sistema e servem apenas para orientar o programador. Você pode optar por desativar estes avisos em servidores locais (de desenvolvimento) apenas configurando o PHP.INI conforme mostramos nessa aula.

Interpretando uma tela de erro

Essa tarefa é fundamental para aprender a achar a solução para cada problema em seus scripts. Qualquer tela de erro sempre irá apresentar todas as informações necessárias para que você identifique o erro e encontre a solução para o mesmo. Na tela sempre será apresentado além do tipo, uma breve descrição e também o arquivo e linha onde está acontecendo o problema. Vejamos então alguns exemplos práticos:

NOTICE

Na imagem acima temos um notice, que está nos dizendo o seguinte: variável não definida e em seguida nos dá o nome da variável teste, informando ainda o arquivo e a linha em que a variável está sendo invocada. A partir desta tela sabemos que na linha 2 do arquivo erros.php estamos tentando usar uma variável que não foi setada anteriormente.

Para solucionar este caso, precisamos definir um valor para a variável teste antes de tentar usá-la em nosso script.

WARNING

Este alerta está informando que temos um problema com o comando include(arquivo.php) onde ouve uma falha ao abrir o fluxo pois o arquivo ou diretório não existe. Isso tudo acontece na linha 3 do arquivo erros.php.

Solução: verificar se o arquivo arquivo.php existe e se está dentro da pasta correta.

FATAL ERROR

Este erro fatal aconteceu pois houve uma tentativa de instanciar um objeto de uma classe chamada nomeclasse na linha 2 do arquivo erros.php, porém esta classe não existe ou então não está inclusa no fluxo do nosso script. Para solucionar deve-se verificar a existência da classe com o nome indicado, e se o arquivo onde a classe se encontra está incluso no fluxo de execução através de um comando include ou require.

erro-fatal

Por falar em require, quando você tentar incluir um arquivo que não existe ou errar o caminho do arquivo no require, o erro acima será mostrado. Portanto, quando seu erro disser Failed opening required, na verdade ele está dizendo que você errou o caminho do arquivo. Os caminhos para inserção de arquivos podem sofrer mudanças de um servidor para outro, portanto sempre verifique a questão de adicionar ou retirar uma barra (/) conforme sua necessidade.

Por exemplo, se você está dando um require($path."classe.php") e recebeu erro, tente require($path."/classe.php") ou o contrário caso a primeira tentativa tenha sido com uma barra.

Outro erro fatal muito comum é a chamada de funções que não existem, seja por erro de digitação ou por copiar códigos sem saber o que os mesmos fazem. Na imagem acima vemos um exemplo clássico que nos diz o seguinte: você está chamando uma função que não existe (inset) na linha 3 do arquivo erros.php. Logo, para solucionar você deve procurar a linha indicada e mudar a chamada da função pelo nome correto da mesma.

Este erro também pode ocorrer caso sua função esteja em um arquivo externo e o mesmo não está sendo carregado (include ou require) no arquivo atual.

erro fatal

Mais um erro fatal muito corriqueiro: chamar um método ou propriedade de uma classe antes de instanciar o objeto da mesma. Este erro acontece com frequência com iniciantes em programação orientada a objetos. Neste caso foi chamado o método setValor de uma classe, porém esse método foi chamado em uma variável que não é objeto da tal classe. Para solucionar é preciso instanciar o objeto antes de chamar o método indicado na linha 11 do arquivo erros.php.

PARSE ERROR

Para finalizar nossos exemplos, vamos ver agora o erro que mais ocorre, principalmente com iniciantes ou programadores que sofrem com falta de atenção e/ou concentração:

Este erro está nos dizendo que é um erro de sintaxe, ou seja, escrita de comandos incorreta. Na linha 3 do arquivo erros.php está sendo esperado uma (,) ou um (;) mas foi encontrado um ECHO. Resumindo, você esqueceu de colocar algum caractere necessário para finalizar uma linha ou uma string ou qualquer outro comando.

Para solucionar, basta verificar a linha indicada para ver o que está faltando. É fundamental ter conhecimento da sintaxe da linguagem para identificar o que está faltando em seu script, seja um ponto ou uma vírgula ou qualquer outro caractere.

Conclusão

Este post não é um guia completo e muito menos definitivo sobre interpretação de erros, pois apenas apresenta um "norte" a ser seguido e dá exemplos básicos. Espero que a partir de agora fique mais fácil encontrar e solucionar problemas em seus sistemas, e que você possa ser um programador (sem aspas) profissional e independente.

Sobre o autor

Ricardo Bernardi

Sou técnico em hardware e desenvolvedor web, e sobre estes dois assuntos comecei a compartilhar aulas e artigos, tornando-me blogueiro em 2008. Em 2010 esse hobby virou profissão, e desde então tenho buscado melhorar e profissionalizar cada vez mais os projetos que mantenho na web.

Comentários

Atualmente temos 17 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.

Deixe seu comentário