2010-08-17 6 views
0

précédemment en PHP 4 j'ai créé un gestionnaire d'erreur personnalisé (ci-dessous) pour gérer mes propres erreurs déclenchées et les erreurs générales de PHP. Mais maintenant PHP 5 introduit des exceptions, c'est-à-dire que je tire parti de PDO pour la manipulation de base de données et je ne suis pas sûr de savoir comment gérer les erreurs PHP générales et ces exceptions?Comment gérer les erreurs et les exceptions PHP de manière centralisée

function errorHandler($errno, $errstr, $errfile, $errline){ 
    switch ($errno) { 
    case E_USER_ERROR: 
    // Send an e-mail to the administrator 
    error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL); 

    // Write the error to our log file 
    error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_LOGFILE, LOG_FILE); 
    break; 

    case E_USER_WARNING: 
    // Write the error to our log file 
    error_log("Warning: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
    break; 

    case E_USER_NOTICE: 
    // Write the error to our log file 
    error_log("Notice: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
    break; 

    default: 
    // Write the error to our log file 
    error_log("Unknown error [#$errno]: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
    break; 
} 

    // Don't execute PHP's internal error handler 
    return TRUE; 

}

+0

Non spécifique à PHP5, merci de tagger correctement. http://php.net/manual/fr/function.set-error-handler.php – TheLQ

Répondre

1

Vous pouvez utiliser set_exception_handler() pour faire face à des exceptions non rattrapées dans votre fonction personnalisée.

La "bonne" façon, cependant, serait pour vous de try ... catch l'exception quand par ex. faire une requête, et utilisez votre fonction personnalisée pour l'enregistrer en conséquence.

+0

Salut Pekka, j'utilise déjà try/catch autour de mes requêtes - mais comment pourrais-je tirer parti de la même fonction personnalisée im en utilisant pour gérer les erreurs? try { $ dbh = nouveau PDO ("mysql: host = $ nom d'hôte; nombd = mysql", $ nom d'utilisateur, $ mot de passe); /*** echo un message disant que nous nous sommes connectés ***/ echo 'Connecté à la base de données'; } catch (PDOException $ e) { echo $ e-> getMessage(); } – htmlr

+0

@mindfriction vous pourriez déclencher une erreur pour obtenir votre fonction personnalisée - un puriste d'exceptions grimperait probablement à cette pensée, mais je ne vois vraiment rien de structurellement mauvais - vous consignez le message de toute façon. –

+0

JUst avait une pensée alors, couldnt je jeter et ErrorException dans mon gestionnaire d'erreur personnalisé? Et puis configurez un gestionnaire d'exception personnalisé pour gérer à nouveau tout centralement (?) ... Se retarder reviendra demain quand je connectez – htmlr

Questions connexes