Gravando log de erros gerados em consultas SQL
Este script tem por finalidade auxiliar a gravação de log de erros em background, impossibilitando que mensagens de erro apareçam no site, expondo a estrutura ou parte dela para pessoas mal intencionadas.
Descrição
Este script tem por finalidade auxiliar a gravação de log de erros em background, impossibilitando que mensagens de erro apareçam no site, expondo a estrutura ou parte dela para pessoas mal intencionadas.
Versões atualizadas deste script
Recomendo a deixar o parametro display_errors desabilitado no site, pois esta é uma funcionalidade interessante somente em modo de produção para depuração. No site o ideal é que se trabalhe com gravação de log como esse que eu posto aqui.
#####
Arquivo de funções do site ou mesmo arquivo onde deseja que seja utilizado (recomendo um arquivo de funções para que possa ser utilizado por qualquer arquivo necessário)
function grava_log_erros_banco($arquivo,$linha,$argumentos,$erro){
/**
* @desc Grava log de erros ocorridos em consultas SQL
* @return Void
* @param String $arquivo, $linha, $argumentos, $erro
*/
// abrindo o arquivo para gravar colocando o ponteiro de escrita na ultima linha
$abre_log = fopen('./util/erros_log', 'a');
// setando a data atual
$data = date('d/m/y H:i:s');
// definindo a mensagem a ser gravada
$mensagem = htmlspecialchars("$data - $arquivo - Linha: $linha - Argumentos: $argumentos - Erro: $erro \n");
// escrevendo no arquivo de log
@fwrite($abre_log,$mensagem);
// fechando o arquivo de log
@fclose($abre_log);
}
####
Arquivo ou parte que chama a função
// pegando email da sessão
$email = $_SESSION['usuario_logado'];
$arquivo = __FILE__;
// verificando se o usuario está logado
$select = "select * from tb_clientes where email='$email'"; $linha = __LINE__; // logo após montar a query atribui o numero da linha em uma variável
$select = mysql_query($select);
if(mysql_error()){
$arquivo = __FILE__; // pegando o caminho completo e nome do arquivo
$argumentos = "Coletando dados do usuário."; // descrição do que estava sendo executado no momento do erro
$erro = mysql_error();
// chamando a função
grava_log_erros_banco($arquivo, $linha, $argumentos, $erro);
}
#############################
Arquivo de log
27/05/12 13:16:24 - /var/www/desenvolvimento/lista-de-compras/site/layout/header.php - Linha: 19 - Argumentos: Coletando dados do usuário. - Erro: Table 'lista_de_compras.tb_clientes' doesn't exist
##############################
ESPERO TER AJUDADO, pra mim esta função é essencial em qualquer projeto, não deixo uma consulta sem possibilidade de gravação de log.
Na verdade eu confundi. O display errors somente deve ficar ativo em ambiente de desenvolvimento e de testes, no ambiente de produção não deve mostrar erros.