|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
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 du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
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.
[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
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 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
Gestion particulière de sessions [ par slhuilli ]
Bonjour,je suis en train de developper un chat en PHP qui jusque là ne me pose pas de soucis particuliers sauf un detail que j'aimerais plus avoir con
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|