'EXCEPTION',
'message' => $exception->getMessage(),
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'code' => $exception->getCode(),
'trace' => $exception->getTraceAsString()
);
// Logger l'exception
if (isset($Conf->_debug_level) && $Conf->_debug_level > 0) {
debug($error_data, "UNCAUGHT_EXCEPTION", 1);
}
// Logger dans la table z_logs
eLog(0, "Exception non gérée: " . $exception->getMessage() . " dans " . $exception->getFile() . ":" . $exception->getLine());
// Afficher une erreur propre à l'utilisateur
if (isset($Conf->_devIp) && $Conf->_devIp && ini_get('display_errors')) {
// En mode dev, afficher les détails
echo "
";
echo "
Exception non gérée
";
echo "
Message: " . htmlspecialchars($exception->getMessage()) . "
";
echo "
Fichier: " . htmlspecialchars($exception->getFile()) . " ligne " . $exception->getLine() . "
";
echo "
Code: " . $exception->getCode() . "
";
echo "
" . htmlspecialchars($exception->getTraceAsString()) . "
";
echo "
";
} else {
// En production, afficher un message générique
echo "";
echo "
Une erreur est survenue
";
echo "
Nous nous excusons pour la gêne occasionnée. L'erreur a été enregistrée.
";
echo "
Retour à l'accueil
";
echo "
";
}
}
//! Handler d'erreurs global
function error_handler($errno, $errstr, $errfile, $errline) {
global $Conf;
// Vérifier si l'erreur doit être rapportée selon error_reporting
if (!(error_reporting() & $errno)) {
return false;
}
$error_types = array(
E_ERROR => 'ERROR',
E_WARNING => 'WARNING',
E_PARSE => 'PARSE',
E_NOTICE => 'NOTICE',
E_CORE_ERROR => 'CORE_ERROR',
E_CORE_WARNING => 'CORE_WARNING',
E_COMPILE_ERROR => 'COMPILE_ERROR',
E_COMPILE_WARNING => 'COMPILE_WARNING',
E_USER_ERROR => 'USER_ERROR',
E_USER_WARNING => 'USER_WARNING',
E_USER_NOTICE => 'USER_NOTICE',
E_STRICT => 'STRICT',
E_RECOVERABLE_ERROR => 'RECOVERABLE_ERROR',
E_DEPRECATED => 'DEPRECATED',
E_USER_DEPRECATED => 'USER_DEPRECATED'
);
$error_type = isset($error_types[$errno]) ? $error_types[$errno] : 'UNKNOWN';
$error_data = array(
'type' => $error_type,
'errno' => $errno,
'message' => $errstr,
'file' => $errfile,
'line' => $errline
);
// Déterminer le niveau de debug pour ce type d'erreur
$debug_level = 4; // Par défaut niveau le plus bas
if (in_array($errno, array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR))) {
$debug_level = 1; // Erreurs critiques
} elseif (in_array($errno, array(E_WARNING, E_CORE_WARNING, E_COMPILE_WARNING, E_USER_WARNING))) {
$debug_level = 2; // Warnings
} elseif (in_array($errno, array(E_NOTICE, E_USER_NOTICE))) {
$debug_level = 3; // Notices
}
// Logger l'erreur
if (isset($Conf->_debug_level) && $Conf->_debug_level >= $debug_level) {
debug($error_data, "PHP_ERROR", $debug_level);
}
// Pour les erreurs critiques, logger aussi dans z_logs
if ($debug_level == 1) {
eLog(0, "Erreur PHP $error_type: $errstr dans $errfile:$errline");
}
// Ne pas exécuter le handler d'erreur PHP interne
return true;
}
//! Enregistrer les handlers
set_exception_handler('exception_handler');
set_error_handler('error_handler');