
As mensagens de erro geradas pelo PHP podem expor informações sensíveis a usuários mal intencionados, ou mesmo, alterar a estética de uma página com mensagens técnicas que vem a trazer uma imagem um pouco rude e anti-profissional do cliente. Por isto, a opção de mostrar estas mensagens é bloqueada.
Você pode tratar os erros utilizando adicionando o seguinte código em seu script PHP:
<?php
// Desativa todos os erros gerenciados pelo PHP:
error_reporting ( 0);
// Função para gerenciamento de erros:
function myErrorHandler ( $errno, $errstr, $errfile, $errline)
{
switch ( $errno)
{
case E_FATAL:
echo "<b>Erro fatal</b> $errstr ($errfile:$errline)<br>\n";
exit ( 1);
break;
case E_ERROR:
echo "<b>Erro</b> $errstr ($errfile:$errline)<br>\n";
break;
case E_WARNING:
echo "<b>Aviso</b> $errstr ($errfile:$errline)<br>\n";
break;
default:
echo "Erro de tipo desconhecido ($errno): $errstr ($errfile:$errline)<br>\n";
break;
}
}
// Captura função de tratamento de erros:
$old_error_handler = set_error_handler ( "myErrorHandler");
?>
A partir deste ponto, quaisquer erro que ocorrer na execução do script (exceto erros de sintaxe e erros fatais), será gerenciada pela função myErrorHandler(), e mostrada conforme o seu tipo.
Você também tem outra opção, que é mais aconselhável, mas mais trabalhosa. Você pode utilizar verificação sempre que executar um comando, e em caso de falha, pode mostrar uma mensagem amigável para o contexto. Por exemplo, para uma conexão ao banco de dados, podes utilizar:
<?php // Acessa o banco de dados MySQL: $sqlid = mysql_connect ( "servidor", "usuario", "senha"); ?>
Caso este comando falhe, nenhuma mensagem será mostrada, e a conexão não será concluída, causando assim erros consecutivos quando houver acesso ao banco que dependa do resultado desta ação. Então, você pode utilizar um tratamento mais adequado, verificando se a conexão ocorreu com sucesso:
<?php
// Acessa o banco de dados MySQL:
if ( ! $sqlid = @mysql_connect ( "servidor", "usuario", "senha"))
{
echo "A conexão ao banco de dados falhou. Favor tentar novamente em breve.";
exit ();
}
?>
Note que o comando mysql_connect foi precedido pelo operador @. Este operador evita que, caso ocorra um erro na execução do comando, seja exibido mesmo quando a configuração do servidor permita. Isto faz com que seu script execute de forma amigável em quaisquer servidor.
Você pode encontrar mais informações sobre tratamento de erro no manual do PHP.