begin process at 2012 02 15 01:51:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > GESTION D'ERREURS

GESTION D'ERREURS


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :erreurs, gestion, class, lang, log Niveau :Débutant Date de création :10/08/2008 Date de mise à jour :10/08/2008 10:31:34 Vu :3 625

Auteur : Luzy

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Voici une petite ébauche de classe de gestion d'erreurs.
Je m'initie à la POO depuis peu de temps et j'essaye d'apprendre par la pratique donc n'hésitez pas à critiquer/commenter cette source et la façon dont elle est codée.

Voila ses fonctionnalitées:
- Gestion des langues (par fichier XML)
- Log au format CSV
- Ajout d'informations (Fichier, Ligne, Date ... )

(Quelques TODO sont notés en commentaires)

En espérant que cette sources pourra servir.

Source

  • <?php
  • // Fichier config de votre site:
  • // Option de la langue
  • define('LANG', 'fr');
  • // Option des logs d'erreurs
  • $log_errors = array('on' => TRUE, // Active le log
  • 'file' => '../log/log_errors.csv'); // Chemin du fichier de log
  • // Option de la lang des erreurs
  • define('LANG_ERRORS_FILE', '../lng/' . LANG . '/errors.xml'); // Chemin du fichier de lang
  • class MyException extends Exception {
  • private $error_name; // Nom de l'erreur à retourner
  • private $error_mess; // Message de l'erreur à retourner
  • private $lang_file; // Chemin du fichier de langue
  • private $log_on; // Activation du système de log
  • private $log_file; // Chemin du fichier de log
  • // Constructeur de la classe.
  • public function __construct($error_name, $lang_file, $log) {
  • $this->error_name = $error_name;
  • $this->lang_file = $lang_file;
  • $this->log_on = $log['on'];
  • // Activation de la gestion de la langue (TODO: Permettre une desactivation du systeme de langues)
  • if (file_exists($this->lang_file)) {
  • // Appel de la fonction gérant la langue
  • $this->getLang();
  • }
  • else {
  • // Sans gestion des Erreurs, on arrête l'application (Pas trouvé comment contourner le problème du "die()" pas élégant.
  • $erreur = 'Fatal Error : Gestion des Errors impossible (Fichier de langue des erreurs introuvables.)';
  • die ($erreur);
  • }
  • // Activation des logs
  • if ($this->log_on == TRUE) {
  • // Assignation du chemin du fichier de log
  • $this->log_file = $log['file'];
  • if (file_exists($this->log_file)) {
  • // Appel de la fonction gérant les Log
  • $this->getLog();
  • }
  • else {
  • // Si le fichier de log est introuvable, on lance l'exception en désactivant la gestion des logs (TODO: Création automatique du fichier)
  • $log_errors = array ('on' => FALSE);
  • throw new MyException('log_file', LANG_ERRORS_FILE, $log_errors);
  • }
  • }
  • // Appel du constructeur parent
  • parent :: __construct($this->error_mess);
  • } // Fin du Constructeur
  • // Gestion de la langue
  • public function getLang() {
  • // Création de l'objet DOM
  • $dom = new DomDocument();
  • // Ouverture du fichier de langue de erreurs
  • $dom->load($this->lang_file);
  • // Retourne le contenu du nom du noeud correspondant au nom de l'erreur
  • $noeud = $dom->getElementsByTagName($this->error_name)->item(0);
  • // Assigne au message d'erreur son contenu
  • $this->error_mess = $noeud->firstChild->nodeValue;
  • }
  • // Gestion des logs
  • public function getLog() {
  • // Ouverture du fichier de log en placant le pointeur à la fin
  • $log_file = $this->log_file;
  • $flux_export = fopen($log_file, 'a+');
  • // Ecriture au format CSV dans le log
  • fputs($flux_export, $this->getTime() . ',' . $this->getLine() . ',' . $this->error_mess . ',' . $this->getFile() . ','."\n".'');
  • // Fermeture du fichier log
  • fclose($flux_export);
  • }
  • // Récupération de la date
  • public function getTime() {
  • return date('Y-m-d H:i:s');
  • }
  • // Méthode retournant le message d'erreur
  • public function getError($options) {
  • // On retourne un message d'erreur en fonction des options choisies
  • $return = '<b>Erreur: ' . $this->getMessage() . '</b><br />';
  • if ($options['line'] == TRUE) { $return .= 'Ligne: ' . $this->getLine() . '<br />'; }
  • if ($options['file'] == TRUE) { $return .= 'Fichier: ' . $this->getFile() . '<br />'; }
  • if ($options['time'] == TRUE) { $return .= 'Heure: ' . $this->getTime() . '<br />'; }
  • // Retourne le résultat de l'erreur
  • return $return;
  • }
  • }
  • // Exemple de fichier lang.xml
  • <?xml version="1.0" encoding="UTF-8"?>
  • <errors>
  • <log_file>Le fichier log est introuvable.</log_file>
  • <divisionbyzero>La division par 0 est interdite !</divisionbyzero>
  • </errors>
  • // Exemple d'utilisation:
  • try
  • {
  • $a = 0; $b = 1;
  • if ($a ==0)
  • {
  • throw new MyException('divisionbyzero', LANG_ERRORS_FILE, $log_errors);
  • }
  • else
  • {
  • $c=$b/$a;
  • }
  • }
  • catch (MyException $e) {
  • $options = array('line' => TRUE, // Active l'affichage de la ligne
  • 'file' => TRUE, // Active l'affichage du nom du fichier
  • 'time' => FALSE); // Active l'affichage de l'heure
  • echo $e -> getError($options);
  • }
  • ?>
<?php

// Fichier config de votre site:
// Option de la langue
define('LANG', 'fr');
// Option des logs d'erreurs
$log_errors = array('on' => TRUE,                              // Active le log
		    'file' => '../log/log_errors.csv');         // Chemin du fichier de log
// Option de la lang des erreurs
define('LANG_ERRORS_FILE', '../lng/' . LANG . '/errors.xml');   // Chemin du fichier de lang

class MyException extends Exception {    

	private $error_name; // Nom de l'erreur à retourner
	private $error_mess; // Message de l'erreur à retourner
	private $lang_file;  // Chemin du fichier de langue
	private $log_on;     // Activation du système de log
	private $log_file;   // Chemin du fichier de log

    // Constructeur de la classe.
    public function __construct($error_name, $lang_file, $log) {

		$this->error_name = $error_name;
		$this->lang_file = $lang_file;
		$this->log_on = $log['on'];

		// Activation de la gestion de la langue (TODO: Permettre une desactivation du systeme de langues)
		if (file_exists($this->lang_file)) {

			// Appel de la fonction gérant la langue
			$this->getLang();

		}

		else {
			
			// Sans gestion des Erreurs, on arrête l'application (Pas trouvé comment contourner le problème du "die()" pas élégant.
			$erreur = 'Fatal Error : Gestion des Errors impossible (Fichier de langue des erreurs introuvables.)';
			die ($erreur);

		}

		// Activation des logs
		if ($this->log_on == TRUE) {

			// Assignation du chemin du fichier de log
			$this->log_file = $log['file'];

			if (file_exists($this->log_file)) {

				// Appel de la fonction gérant les Log
				$this->getLog();

			}

			else {
	
				// Si le fichier de log est introuvable, on lance l'exception en désactivant la gestion des logs (TODO: Création automatique du fichier)
				$log_errors = array ('on' => FALSE);
				throw new MyException('log_file', LANG_ERRORS_FILE, $log_errors);

			}

		}

		// Appel du constructeur parent
        parent :: __construct($this->error_mess);

    } // Fin du Constructeur

	// Gestion de la langue
	public function getLang() {

		// Création de l'objet DOM
		$dom = new DomDocument();

		// Ouverture du fichier de langue de erreurs
		$dom->load($this->lang_file);

		// Retourne le contenu du nom du noeud correspondant au nom de l'erreur
  		$noeud = $dom->getElementsByTagName($this->error_name)->item(0);

		// Assigne au message d'erreur son contenu
    	$this->error_mess = $noeud->firstChild->nodeValue;
	}

	// Gestion des logs
	public function getLog() {

		// Ouverture du fichier de log en placant le pointeur à la fin
		$log_file = $this->log_file;
		$flux_export = fopen($log_file, 'a+');
	
		// Ecriture au format CSV dans le log
		fputs($flux_export, $this->getTime() . ',' . $this->getLine() . ',' . $this->error_mess . ',' . $this->getFile() . ','."\n".'');

		// Fermeture du fichier log
		fclose($flux_export);

	}
    
    // Récupération de la date
    public function getTime() {
        return date('Y-m-d H:i:s');
    }
    
    // Méthode retournant le message d'erreur
    public function getError($options) {

        // On retourne un message d'erreur en fonction des options choisies
        $return = '<b>Erreur: ' . $this->getMessage() . '</b><br />';
		if ($options['line'] == TRUE) { $return .= 'Ligne: ' . $this->getLine() . '<br />'; }
		if ($options['file'] == TRUE) { $return .= 'Fichier: ' . $this->getFile() . '<br />'; }
		if ($options['time'] == TRUE) { $return .= 'Heure: ' . $this->getTime() . '<br />'; }

		// Retourne le résultat de l'erreur
        return $return;

    }

}

// Exemple de fichier lang.xml
<?xml version="1.0" encoding="UTF-8"?>
<errors>
		<log_file>Le fichier log est introuvable.</log_file>
		<divisionbyzero>La division par 0 est interdite !</divisionbyzero>
</errors>


// Exemple d'utilisation:

try 
{
    $a = 0; $b = 1;
    if ($a ==0)
    {
        throw new MyException('divisionbyzero', LANG_ERRORS_FILE, $log_errors);
    }
        else
    {
        $c=$b/$a;
    }
}
catch (MyException $e) {
	$options = array('line' => TRUE,   // Active l'affichage de la ligne
			 'file' => TRUE,   // Active l'affichage du nom du fichier
			 'time' => FALSE); // Active l'affichage de l'heure
    echo $e -> getError($options);

}

?>

 Conclusion

Ici la langue est spécifiée par un fichier de configuration mais elle peut très bien l'être par les préférences du navigateur, etc ...

La fonction getError() propose un formattage xHTML ainsi qu'une langue définie tout simplement pour laisser la possilité à l'utilisateur de cette classe de le coupler avec son systeme de template (auquel cas il fera son propre formatage). Ici, j'ai choisis d'intégrer un formatage juste pour améliorer l'esthétique, mais il est évident que l'affichage du français est en contradiction avec la fonctionnalité de langues intégrée.


 Historique

10 août 2008 00:22:54 :
Correction orthographique ;)
10 août 2008 10:31:34 :
Petite erreur dans l'exemple.

 Sources du même auteur

BANNISSEMENT PAR IP (PDO REQUIS)

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 Sources en rapport avec celle ci

Source avec Zip POO - LOGGING PACKAGE par Waredan
Source avec une capture CLASS LANG AVEC COOKIE + HTTP_ACCEPT_LANGUAGE par CrazyShooter
Source avec Zip EXEMPLE DE CLASSE DE GESTION DE PAGE DE FORMULAIRE par charliecollard
Source avec Zip [PHP5] PHP DEBUGGER ET HELPER par malalam
CLASS SQL PLUTÔT COMPLÈTE, AVEC UNE GESTION DES ERREURS PAR... par the_angel

Commentaires et avis

Commentaire de steweb57 le 11/08/2008 22:17:26

J'ai regardé rapidement, un petit détail me saute cependant aux yeux : la méthode "getError()" qui est censée retourné une erreur dans la langue coreespondant aux fichier de langue choisi, or cette méthode retourne en début d'érreur : "<b>Erreur: " qui est du francais !... avec un fichier de langue en allemand ca peut choquer. Mais je supose que ce n'est qu'un oublie.

Commentaire de Luzy le 11/08/2008 23:05:24

Oui, comme j'ai spécifié dans la partie conclusion, j'ai fais le choix de penser que l'utilisateur final de la classe l'intégrera à son systeme de template et de langue.
A quoi sert donc un système de gestion de langue spécifique pour les erreurs ? Je dirais que la gestion d'erreur est primordiale dans un projet et qu'il doit à mon avis être le plus autonome possible.
Cependant je conçois que je ne devrais pas imposer ce choix et je vais donc régler le problème le plus vite possible (j'avoue aussi avoir eu la flemme xD)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

gestion personalisé des erreurs( pb : E_PARSE [ par gogosnake ] bonjour a tous,j'ai cree un script avec "set_error_handler" me permetant de gerer les erreur php.Tous marche parfaitement exepté pour les "Parse error Gestion des erreurs [ par aquouel ] Bonjour tout le monde, j'ai un soucis pour retourner les erreurs sur la page de mon formulaire. Je m'explique: Page: formulaire. Quelle est la meilleure class ou library pour la gestion de bases de données ? [ par paguira ] Bonjour,Quelle est la meilleure class ou library pour la gestion de bases de données ?Que pensez vous de ADOBDB ?Est elle maintenue ?Y a t'il un site Gestion de log [ par citt ] Bonjour, Je souhaite mettre en place une gestion de log sur mon site, cette gestion permettrai de savoir qui fait quoi et ou. J'ai développer une cl [POO] Une classe dans une classe [ par Mrreivax ] Bonsoir.Et bien voila. J'ai créé une classe de gestion des images.J'ai par la suité créé une autre classe de gestion de banières.Mais, cette dernière Gestion des erreurs [ par Linkman ] Bonjour,Savez-vous comment construire une bonne gestion des erreurs comme par exemple celle de phpbb qui est capable de dire par exemple si il y a tro connection mysql [ par nicomilville ] Bonjour voici mon code pour le moment :&lt;?phpif ( !isset($_POST['login']) || !isset($_POST['pass']) ) // On Vérifie si le formulair gestion des rendez_vous [ par thouthoug ] bonjour,jai un problème concernant la gestion des rendez_vous pour un cabinet de medecin,pouvez vous m'aider?merci. Flux rss rapatrier une fois sur 2 [ par Apprentilinux ] Bonjour, voilà mon souci le site que je récupère qu'une fois sur 2 les flux rss, il saute d'une ligne, voilà le code :<pre class="alt2" dir="ltr" sty Stocker erreurs dans base [ par eax ] Bonjour,Je cherche un moyen de stocker les différentes erreurs php (notice, warning...) dans une table mysql au lieu de les afficher sur la page.Merci


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,668 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales