Erros são coisas que não queremos, mas se eles ocorrerem os queremos ver, principalmente durante o processo de desenvolvimento. É fato que ao desenvolver algo que não seja trivial estamos propensos a inserir erros no código, vê-los e corrigi-los faz parte do processo. Acontece que dependendo das configurações do servidor estes erros podem não serem mostrados, o que é uma coisa boa se o software estiver em produção, já que mensagens de erros podem fornecer informações importantes para possíveis atacantes. Então em alguns casos queremos habilitar a exibição de erros e em outros momentos queremos que eles não sejam exibidos.

Erros podem ocorre!
Erros, erros e mais erros 🙂

No PHP temos duas configurações básicas que lidam com erros, display_errors e display_errors, que podem ser modificadas tanto dentro do php.ini, chamando determinadas funções ou pelo arquivo .htaccess.

Modo mais rápido de habilitar os erros no PHP
ini_set('display_errors', 1);
error_reporting(E_ALL);

Na primeira linha habilitamos o PHP para mostrar os erros(para desabilitar usamos o valor 0) , na segunda definimos o nível de erro que queremos reportar, no nosso caso todos.

Abaixo podemos conferir uma lista dos níveis de erro que PHP aceita e suas constantes:

ConstanteDescrição
E_ALLTodos erros e avisos são exibidos.
E_ERRORErros fatais de tempo de execução. Eles indicam erros que não podem ser recuperados, como um problema de alocação de memória. A execução do script é interrompida.
E_RECOVERABLE_ERRORErro fatal capturável. Indica que ocorreu um erro provavelmente perigoso, mas não deixou a Engine em um estado instável. Se o erro não for capturado por um handle definido pelo usuário, o aplicativo será interrompido como se fosse um E_ERROR.
E_WARNINGAvisos em tempo de execução (erros não fatais). A execução do script não é interrompida.
E_PARSEErros de parse em tempo de compilação. Os erros de parse devem ser gerados apenas pelo parser.
E_NOTICENotificação de tempo de execução. Indica que o script encontrou algo que poderia indicar um erro, mas também poderia ocorrer no curso normal da execução de um script.
E_STRICTHabilita o PHP a sugerir alterações no código, o que garantirá a melhor interoperabilidade e a compatibilidade futura do seu código.
E_CORE_ERRORErros fatais que ocorrem durante a inicialização inicial do PHP. É como um E_ERROR, exceto que é gerado pelo núcleo do PHP.
E_CORE_WARNINGAvisos (erros não fatais) que ocorrem durante a inicialização inicial do PHP. É como um E_WARNING, exceto que é gerado pelo núcleo do PHP.
E_COMPILE_ERRORErros fatais em tempo de compilação. É como um E_ERROR, exceto que é gerado pelo Zend Scripting Engine.
E_COMPILE_WARNINGAvisos em tempo de compilação (erros não fatais). É como um E_WARNING, exceto que é gerado pelo Zend Scripting Engine.
E_USER_ERRORMensagem de erro gerada pelo usuário. É como um E_ERROR, exceto que é gerado no código PHP usando a função PHP trigger_error().
E_USER_WARNINGMensagem de aviso gerada pelo usuário. É como um E_WARNING, exceto que é gerado no código PHP usando a função PHP trigger_error().
E_USER_NOTICEMensagem de aviso gerado pelo usuário. É como um E_NOTICE, exceto que é gerado no código PHP usando a função PHP trigger_error().
E_DEPRECATEDNotificações em tempo de execução. Habilite isso para receber avisos sobre código que não funcionará em versões futuras.
E_USER_DEPRECATEDMensagem de notificação gerada pelo usuário. É como um E_DEPRECATED, exceto que é gerado no código PHP usando a função PHP trigger_error ().
Constantes dos nível de erro do PHP

As constantes dos níveis de erro podem ser combinadas para melhor configurar os nível de erros a serem mostrado utilizando os operadores | e & para “juntar” dois níveis de erro e o ~ negar um. Configurações comuns são:

// Exibe todos os erros exceto notificações
E_ALL & ~E_NOTICE  

//exibe todos os erros, exceto notificações e habilita sugerir alterações no código
E_ALL & ~E_NOTICE & ~E_STRICT  

//Exibe somente erros
E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

Uma informação importante: as funções ini_set('display_errors', 1); e error_reporting(E_ALL); infelizmente não são capazes de exibir erros de parse(sintaxe), como falta de ponto e vírgula ou falta de chaves, para isso deve-se alterar as opções no php.ini ou pelo .htaccess.

Habilitando a exibição de erros no .htaccess

Quando temos acesso ao diretório de arquivos(o que é bem frequente 🙂 ) e o .htaccess está habilitado podemos habilitar os erros por ele com a seguinte instrução.

php_flag display_errors on
php_value error_reporting -1

O display_errors aceita os valores on para habilitado e off para desabilitado. O error_reporting aceita valores inteiros para configurar o nível de error, utilizamos -1 para exibir todos os erros. Para outros níveis podemos utilizar os valores numérico das constantes que vimos na tabela e suas combinações. Para obter estes valores podemos simplesmente utilizar um echo (int) E_ALL & ~E_NOTICE & ~E_STRICT; (retorna 30711) em algum script por exemplo.

Habilitando erros no php.ini

Este é o método que menos temos a nossa disposição, pois em muitas hospedagens não é possível alterar o arquivo php.ini.

Para alterar basta abrir o arquivo php.ini, no linux normalmente se encontra em /etc/php/<versao>/apache2/php.ini e buscar a seguinte linha e alterá-la.

//de
display_errors = Off
// para
display_errors = On

Também podemos alterar o nível de erro do mesmo modo.

Habilitando log de erros no .htaccess

Em muitos casos, o mais interessante é não exibir na página os erros e sim que estes sejam exibido dentro de um arquivo de log, podemos habilitá-lo através do próprio .htaccess :

php_flag log_errors on
php_value error_log log_erros.log

Na linha 1 habilitamos os erros a irem para um arquivo de log, na linha 2 especificamos o nome do arquivo ou caminho dele, sendo que não é muito aconselhável deixá-lo em uma pasta publica da sua hospedagem. Ou pelo menos bloquei o acesso dele via .htaccess.

<Files log_erros.log>
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

Bom erra isso, t+, e que seus códigos tenham poucos erros 🙂