2010-02-16 7 views
4

J'ai utilisé une classe qui convertit les erreurs en exceptions dans PHP 5 et enregistre les erreurs dans un fichier et/ou les envoie par courrier électronique à un compte spécifié. Y a-t-il une meilleure manière de faire cela? Il y a quelque chose à ce sujet que je sais peut être mieux. J'utilise set_error_handler. Mon code fait ce qu'il devrait en ce qu'il se connecte et envoie des courriels erreurs mais je fais le processus de la meilleure façon. Serait-il préférable de le connecter à une base de données - en supposant qu'une connexion de données serait présente dans une erreur. Quelle est la norme de l'industrie pour les sites Web?Meilleures pratiques pour la gestion globale des erreurs en PHP?

+2

refactormycode.com –

+0

Vous devez définir votre gestionnaire d'erreur avec 'set_error_handler'. Sinon, quelle est votre question? Qu'est-ce que votre code ne fait pas que vous voulez qu'il fasse? Sois plus précis. – meagar

Répondre

6

Votre code pour traiter les erreurs doit être absolument à l'épreuve des balles.

Parfois, il entrera en action pour une raison vraiment obscure que vous avez oublié de tester, mais vous voulez quand même qu'il s'exécute quand il se débat dans la version de code de l'apocalypse.

Écrire sa sortie à une base de données crée une énorme dépendance pour votre code - et l'absence de la base de données est plus susceptible d'être une cause majeure de problèmes qui seraient déclarés. S'appuyer sur le courrier est toujours une dépendance, mais l'objectif le plus immédiat dans le cas d'une panne devrait être de faire fonctionner le système à nouveau - donc l'envoi d'un email est un moyen très efficace de vous prévenir que vous devez réparer quelque chose .

installations de gestion des fichiers PHP ne se prêtent pas à un accès simultané - donc, bien que je vous recommande de vous connecter tous les événements locaux, ne pas écrire les fichiers à partir de votre code - utiliser l'interface syslog. Par tous les moyens envoyer un e-mail avec les détails pertinents après vous l'avez envoyé au syslog.

HTH

C.

2

Je ne voudrais pas vider cette logique dans le gestionnaire d'erreurs.

Jetez un oeil à cette méthode de Kohana.

/** 
* PHP error handler, converts all errors into ErrorExceptions. This handler 
* respects error_reporting settings. 
* 
* @throws ErrorException 
* @return TRUE 
*/ 
public static function error_handler($code, $error, $file = NULL, $line = NULL) 
{ 
    if (error_reporting() & $code) 
    { 
     // This error is not suppressed by current error reporting settings 
     // Convert the error into an ErrorException 
     throw new ErrorException($error, $code, 0, $file, $line); 
    } 

    // Do not execute the PHP error handler 
    return TRUE; 
} 

Nettoyez et faites ce que décrit la méthode. Vous pouvez maintenant déplacer votre manipulation dans un gestionnaire d'exceptions ou dans un bloc catch.

+0

Eh bien, j'ai répondu à cette question quand il avait un échantillon de code, mais maintenant il a disparu alors je m'excuse si ma réponse n'a aucun sens. –

Questions connexes