Accueil > > > GESTION D'ERREURS
GESTION D'ERREURS
Information sur la source
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 de la même categorie
Commentaires et avis
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 :<?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
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|