New file |
0,0 → 1,384 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 5.0.4 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2005 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This file is part of eFlore-Debogage. | |
// | | |
// | Foobar is free software; you can redistribute it and/or modify | |
// | it under the terms of the GNU General Public License as published by | |
// | the Free Software Foundation; either version 2 of the License, or | |
// | (at your option) any later version. | |
// | | |
// | Foobar is distributed in the hope that it will be useful, | |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
// | GNU General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU General Public License | |
// | along with Foobar; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id: GestionnaireErreur.class.php,v 1.1 2005/11/15 17:33:49 jp_milcent Exp $ |
/** |
* Classe de gestion des erreurs. |
* |
* |
* |
*@package eFlore |
*@subpackage Debogage |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author aucun |
*@copyright Tela-Botanica 2000-2005 |
*@version $Revision: 1.1 $ $Date: 2005/11/15 17:33:49 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
|
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
|
|
// +------------------------------------------------------------------------------------------------------+ |
// | CORPS du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
|
|
/** |
* Classe GestionnaireErreur |
* |
* Gérer les erreurs PHP et SQL. |
*/ |
class GestionnaireErreur { |
/*** Attributes: ***/ |
|
/** |
* Contient la liste des erreurs. |
* @access private |
*/ |
private $erreurs; |
|
/** |
* Permet de savoir si on veut faire apparaître ou pas le contexte de l'erreur, |
* c'est à dire le contenu des variables. |
* @access private |
*/ |
private $contexte; |
|
/** |
* Permet de savoir si on veut faire apparaître ou pas les erreurs Pear. |
* @access private |
*/ |
private $pear; |
|
/** |
* Chaine de caractères permettant d'identifier les erreurs de la bibliothèque Pear. |
* @access private |
*/ |
private $pear_chaine; |
|
/** |
* Contient le niveau d'erreur courrant. Celui que l'on donne à la fonction |
* error_reporting(). |
* @access private |
*/ |
private $niveau_erreur_courrant; |
|
/*** Constructeur: ***/ |
|
/** |
* Construit le gestionnaire d'erreur. |
* |
* @return void |
* @access public |
*/ |
public function __construct($bool_contexte = false, $int_niveau = 2048, $bool_pear = false, $str_pear = '') |
{ |
$this->erreurs = array(); |
$this->setContexte($bool_contexte); |
$this->setNiveauErreurCourrant($int_niveau); |
$this->setPear($bool_pear); |
$this->setPearChaine($str_pear); |
set_error_handler(array($this, 'gererErreur')); |
} // end of member function __construct |
|
|
/*** Destructeur: ***/ |
public function __destruct() |
{ |
echo $this->retournerErreur(); |
} |
|
/*** Accesseurs: ***/ |
|
/** |
* Récupère le tableau des erreurs. |
* |
* @return array |
* @access public |
*/ |
public function getErreur() |
{ |
return $this->erreurs; |
} |
|
/** |
* Ajoute une erreur à la liste. |
* |
* @param array une_erreur |
* @return void |
* @access public |
*/ |
public function setErreur($une_erreur) |
{ |
$this->erreurs[] = $une_erreur; |
} |
|
/** |
* Récupère la valeur du contexte. |
* |
* @return boolean |
* @access public |
*/ |
public function getContexte() |
{ |
return $this->contexte; |
} |
|
/** |
* Définit si oui ou non le contexte sera affiché. |
* |
* @param boolean un_contexte |
* @return void |
* @access public |
*/ |
public function setContexte( $un_contexte ) |
{ |
$this->contexte = $un_contexte; |
} |
|
/** |
* Récupère la valeur de l'attribut Pear. |
* |
* @return boolean true pour afficher les erreurs Pear sinon false. |
* @access public |
*/ |
public function getPear() |
{ |
return $this->pear; |
} |
|
/** |
* Définit si oui ou non les erreurs Pear seront affichées. |
* |
* @param boolean true pour afficher les erreurs Pear sinon false. |
* @return void |
* @access public |
*/ |
public function setPear( $p ) |
{ |
$this->pear = $p; |
} |
|
/** |
* Récupère la valeur de l'attribut pear_chaine. |
* |
* @return string la chaine de caractère identifiant les erreurs Pear. |
* @access public |
*/ |
public function getPearChaine() |
{ |
return $this->pear_chaine; |
} |
|
/** |
* Définit la chaine de caractère identifiant les erreurs Pear. |
* |
* @param string la chaine de caractère identifiant les erreurs Pear. |
* @return void |
* @access public |
*/ |
public function setPearChaine( $pc ) |
{ |
$this->pear_chaine = $pc; |
} |
|
|
/** |
* Récupère le niveau d'erreur courrant. |
* |
* @return int le niveau d'erreur courrant. |
* @access public |
*/ |
public function getNiveauErreurCourrant() |
{ |
return (int)$this->niveau_erreur_courrant; |
} |
|
/** |
* Définit le niveau d'erreur courrant. |
* |
* @param int un niveau d'erreur. |
* @return void |
* @access public |
*/ |
public function setNiveauErreurCourrant($niveau) |
{ |
$this->niveau_erreur_courrant = $niveau; |
} |
|
/*** Méthodes : ***/ |
|
/** |
* |
* @param int niveau |
* @param string message |
* @param string fichier |
* @param int ligne |
* @param boolean contexte |
* @return void |
* @access public |
*/ |
public function gererErreur( $niveau, $message, $fichier, $ligne, $contexte ) |
{ |
$aso_erreur = array(); |
// Nous vérifions si nous affichons ou pas l'erreur en fonction du niveau demandé |
if ( $niveau <= $this->getNiveauErreurCourrant() ) { |
$aso_erreur['niveau'] = $niveau; |
$aso_erreur['message'] = $message; |
$aso_erreur['fichier'] = $fichier; |
$aso_erreur['ligne'] = $ligne; |
if ($this->getContexte()) { |
$aso_erreur['contexte'] = $contexte; |
} |
$this->setErreur($aso_erreur); |
} |
|
// Si nous avons à faire à une erreur et non à un warning ou une notice, nous arrêtons l'exécution du script |
if ($niveau == E_USER_ERROR) { |
echo $this->retournerErreur(); |
exit(1); |
} |
} // end of member function gererErreur |
|
/** |
* Retourne l'erreur PHP formatée en XHTML. |
* |
* @return string |
* @access public |
*/ |
public function retournerErreur() |
{ |
$retour = ''; |
$erreur_pear_nbre = 0; |
foreach($this->getErreur() as $aso_erreur) { |
if ('<!-- BEGIN sql -->' == substr($aso_erreur['message'], 0, 18)) { |
$retour .= $aso_erreur['message']; |
continue; |
} |
// Nous testons les erreurs PEAR pour ne pas en tenir compte |
if (!$this->getPear() && stristr($aso_erreur['fichier'], $this->getPearChaine())) { |
$erreur_pear_nbre++; |
} else { |
$retour .= '<p class="attention">'."\n"; |
$retour .= '<strong>ERREUR</strong><br />'."\n"; |
$retour .= '<strong>Niveau : </strong>'.$aso_erreur['niveau'].'<br />'."\n"; |
$retour .= '<strong>Message : </strong>'.$aso_erreur['message'].'<br />'."\n"; |
$retour .= '<strong>Fichier : </strong>'.$aso_erreur['fichier'].'<br />'."\n"; |
$retour .= '<strong>Ligne : </strong>'.$aso_erreur['ligne'].'<br />'."\n"; |
if ($this->getContexte()) { |
$retour .= '<pre>'."\n"; |
$retour .= '<stong>Contexte : </stong>'."\n".print_r($aso_erreur['contexte'], true)."\n"; |
$retour .= '</pre>'."\n"; |
} |
$retour .= '</p>'."\n"; |
} |
} |
if ($erreur_pear_nbre != 0) { |
$retour .= '<p class="attention"><strong>Nombre d\'erreurs PEAR : </strong>'.$erreur_pear_nbre.'</p>'."\n"; |
} |
return $retour; |
} // end of member function retournerErreur |
|
/** |
* Retourne l'erreur SQL formatée. |
* |
* @param string fichier |
* @param int ligne |
* @param string message |
* @param string requete |
* @param string autres |
* @return string |
* @static |
* @access public |
*/ |
public static function retournerErreurSql( $fichier, $methode, $message, $requete = NULL, $autres = NULL ) |
{ |
$retour = '<!-- BEGIN sql -->'; |
$retour .= '<div id="zone_erreur">'."\n"; |
$retour .= '<h1 > ERREUR SQL </h1><br />'."\n"; |
$retour .= '<dl>'."\n"; |
$retour .= '<dt> Fichier : </dt> '; |
$retour .= '<dd> '.$fichier.'</dd>'."\n"; |
|
$retour .= '<dt> Méthode : </dt> '; |
$retour .= '<dd> '.$methode.'</dd>'."\n"; |
|
$retour .= '<dt> Message erreur : </dt> '; |
$retour .= '<dd> '.$message.'</dd>'."\n"; |
|
if (!is_null($requete)) { |
$retour .= '<dt> Requete : </dt> '; |
$retour .= '<dd> '.$requete.' </dd>'."\n"; |
} |
|
if (!is_null($autres)) { |
$retour .= '<dt> Autres infos : </dt> '; |
$retour .= '<dd> '.$autres.' </dd>'."\n"; |
} |
$retour .= '</dl>'."\n"; |
$retour .= '</div>'."\n"; |
$retour .= '<!-- END sql -->'."\n"; |
|
return $retour; |
} // end of member function retournerErreurSql |
|
/** |
* Retourne l'erreur SQL formatée selon le format demandé. |
* |
* @param string fichier |
* @param int ligne |
* @param string message |
* @param string format : txt. |
* @return string |
* @static |
* @access public |
*/ |
public static function formaterMessageErreur( $message, $fichier = null, $ligne = null, $format = 'txt' ) |
{ |
$retour = ''; |
if ($format == 'txt') { |
$retour .= "\n"; |
if (!is_null($fichier)) { |
$retour .= "\t".'Fichier : '.$fichier."\n"; |
} |
if (!is_null($ligne)) { |
$retour .= "\t".'Ligne : '.$ligne."\n"; |
} |
$retour .= "\t".'Message : '.$message."\n"; |
} |
return $retour; |
} |
} |
|
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log$ |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |