La gestion des erreurs en PHP
dossier tiré de mon expèrience aidée d'un article très complet sur la gestion personnalisée des erreurs
En incluant ce code dans toutes les pages d'un programme PHP, on est sur de gérer et mémoriser toutes les erreurs. Le fait de logguer dans un format xml permet une relecture aisée. C'est le code utilisé dans mon projet RAT, qui dispose d'un module de lecture des logs.
error_reporting(E_ALL);
function AddLog($msg, $file='erreurs.log')
{
$f = fopen(ledossierdeslogs.$file, 'a+');
fwrite($f, "<log><date>".date('d/M/Y H:i:s', time())."</date>$msg</log>");
fclose($f);
}
function error_handler($type, $msg, $file, $line, $context)
{
switch($type)
{
case E_ERROR: //fatal runtime error
case E_PARSE: //Runtime parse error
case E_CORE_ERROR: //Fatal startup error
case E_COMPILE_ERROR: //Fatal compile-time error
case E_USER_ERROR: //User-triggered fatal error
$gravite = 'fatale';
echo "Suite à un problème indépendant de notre volonté,
ce document est indisponible. Veuillez nous en excuser.<br>".
"Le webmestre a reçu un message à ce sujet.";
break;
case E_WARNING: //Non-fatal runtime error
case E_CORE_WARNING: //Non-fatal startup error
case E_COMPILE_WARNING: //Non-fatal compile-time error
case E_USER_WARNING: //User-triggered non-fatal error
$gravite = 'alerte';
break;
case E_NOTICE: //Non-fatal runtime notice
case E_USER_NOTICE: //User-triggered notice
$gravite = 'benigne';
break;
default: $gravite = 'inconnue';
}
AddLog("<type>$gravite ($type)</type><file>$file (ligne
$line)</file><msg>$msg</msg>"); //<context>".print_r($context)."</context>");
}
set_error_handler("error_handler");
Lien(s)
07/05/2003 - Cédric Girard