Introdução: por que o PHP fica em silêncio quando algo dá errado?
\n\nVocê já escreveu um script PHP, executou no navegador — e viu... uma página em branco? Nenhuma mensagem, nenhuma dica. Apenas silêncio e aquela sensação de que algo está errado. Parece familiar?
\n\nEsse é um dos problemas mais comuns enfrentados por iniciantes em PHP. A pergunta “How can I get useful error messages in PHP?” no Stack Overflow já acumulou milhares de visualizações. E não é surpresa: sem mensagens de erro claras, a depuração vira um verdadeiro jogo de adivinhação.
\n\nNeste artigo, vamos mostrar como “fazer o PHP falar” e contar exatamente o que deu errado. Você vai descobrir quais configurações controlam a exibição de erros, como ativá-las em diferentes estágios do desenvolvimento e o que fazer se os erros ainda assim não aparecerem. Vamos lá!
\n\nPor que o PHP oculta erros por padrão?
\n\nAntes de começarmos a mexer nas configurações, vamos entender o motivo. O PHP é uma linguagem que roda no servidor. Em servidores de produção, exibir erros para os usuários é uma má prática. Imagine: em vez de uma página bonita de loja virtual, o cliente vê algo como Fatal error: Call to undefined function. Isso não é apenas feio, mas também inseguro — um invasor pode descobrir a estrutura do seu código.
Por isso, os desenvolvedores do PHP definiram que, por padrão, a exibição de erros no navegador fica desligada. Mas em servidores locais (como OpenServer, XAMPP, MAMP) ou durante o desenvolvimento, isso atrapalha bastante. Vamos resolver isso.
\n\nMétodo 1: Ativando erros pelo php.ini (globalmente)
\n\nA maneira mais confiável é alterar o arquivo de configuração php.ini. Localize-o na pasta do seu PHP (ou no painel de controle do seu servidor local). Abra o arquivo e encontre (ou adicione) as seguintes linhas:
display_errors = On\nerror_reporting = E_ALL\n\n\nO que isso significa?
\n- \n
display_errors = On— permite exibir erros diretamente na tela (navegador ou console). \n error_reporting = E_ALL— instrui o PHP a mostrar todos os tipos de erro: de avisos (warnings) a erros fatais. \n
Após as alterações, reinicie o servidor web (Apache, Nginx). Agora qualquer script exibirá os erros.
\n\nImportante: Em servidores de produção, nunca deixe display_errors = On. Use Off e configure o logging (explicado a seguir).
Método 2: Ativando erros diretamente no script (jeito rápido)
\n\nSe você não tem acesso ao php.ini (por exemplo, em uma hospedagem compartilhada) ou quer ativar erros apenas para um arquivo específico, use as funções ini_set() e error_reporting(). Adicione estas linhas no início do seu script PHP:
<?php\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n\n// Seu código a partir daqui\n$foo = 1/0; // Gera um Warning: Division by zero\n?>\n\n\nExplicando linha por linha:
\n- \n
ini_set('display_errors', 1)— ativa a exibição de erros na tela. \n ini_set('display_startup_errors', 1)— ativa erros que ocorrem durante a inicialização do PHP (por exemplo, se o próprio script não conseguir carregar). \n error_reporting(E_ALL)— exibe todos os níveis de erro. \n
Este método funciona instantaneamente e não requer reinicialização do servidor. Ideal para depuração rápida.
\n\nMétodo 3: Usando .htaccess (para Apache)
\n\nSe você usa o servidor Apache, pode ativar erros através do arquivo .htaccess na pasta raiz do site. Adicione estas linhas:
php_flag display_errors on\nphp_value error_reporting E_ALL\n\n\nApós salvar o arquivo, os erros começarão a ser exibidos para todos os scripts nesta pasta e suas subpastas. Prático quando você precisa ativar a depuração rapidamente.