Subversion Repositories Applications.framework

Rev

Rev 115 | Rev 122 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5 aurelien 1
<?php
105 aurelien 2
// declare(encoding='UTF-8');
5 aurelien 3
/**
105 aurelien 4
* classe de gestion des exceptions.
120 aurelien 5
*
6
* PHP Version 5
7
*
105 aurelien 8
* @category  Class
9
* @package   Framework
120 aurelien 10
* @author	aurelien <aurelien@tela-botanica.org>
105 aurelien 11
* @copyright 2009 Tela-Botanica
120 aurelien 12
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
* @license   http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
* @version   SVN: $$Id: GestionnaireException.php 120 2009-09-01 12:21:14Z aurelien $$
15
* @link	  /doc/framework/
16
*
105 aurelien 17
*/
5 aurelien 18
class GestionnaireException {
120 aurelien 19
 
5 aurelien 20
	/**
105 aurelien 21
	 * Liste des exceptions enregistrées
5 aurelien 22
	 */
120 aurelien 23
	private static $exceptions = array();
24
 
5 aurelien 25
	/**
105 aurelien 26
	 * Détermine si l'on affiche ou nom le contexte
5 aurelien 27
	 */
120 aurelien 28
	private static $contexte = false;
29
 
5 aurelien 30
	/**
105 aurelien 31
	 * Definit si php est lancé en ligne de commande ou en mode serveur
5 aurelien 32
	 */
120 aurelien 33
	private static $mode = php_sapi_name ;
34
 
5 aurelien 35
	/**
36
	 * le gestionnaire d'exception est un singleton
114 jp_milcent 37
	 * et possède donc un "pointeur statique sur lui-même"
5 aurelien 38
	 */
115 jp_milcent 39
	private static $gestionnaireException;
120 aurelien 40
 
5 aurelien 41
	/**
105 aurelien 42
	 * Constructeur avec paramètres optionnel
5 aurelien 43
	 * @param bool indique si l'on veut afficher ou non le contexte des exceptions (i.e. la trace)
44
	 */
45
	public function __construct($contexte = false) {
115 jp_milcent 46
		self::$exceptions = array();
120 aurelien 47
		self::$mode = $contexte;
48
		self::$mode = php_sapi_name();
49
 
50
		set_exception_handler(array(get_class($this),'gererException'));
51
		set_error_handler(array(get_class($this),'gererErreur'));
5 aurelien 52
	}
120 aurelien 53
 
5 aurelien 54
	/**
105 aurelien 55
	 * Renvoie le booleen définissant si l'on affiche le contexte ou non
5 aurelien 56
	 */
120 aurelien 57
	public static function getContexte() {
58
		return self::$mode;
5 aurelien 59
	}
120 aurelien 60
 
5 aurelien 61
	/**
62
	 * Definit si l'on veut afficher le contexte ou non
105 aurelien 63
	 * @param bool true si on veut afficher le contexte, false sinon, par défaut vaut false
5 aurelien 64
	 */
65
	public function setContexte($contexte) {
120 aurelien 66
		self::$mode = $contexte;
5 aurelien 67
	}
120 aurelien 68
 
105 aurelien 69
	 /** Fonction d'accès au singleton
5 aurelien 70
	 * @return GestionnaireErreur le gestionnaire d'exceptions courant
71
	 */
114 jp_milcent 72
	public static function getInstance() {
5 aurelien 73
		if (self::$gestionnaireException instanceof GestionnaireException) {
74
			return self::$gestionnaireException;
75
		}
76
		self::$gestionnaireException = new GestionnaireException;
120 aurelien 77
 
78
		return self::$gestionnaireException;
5 aurelien 79
	}
120 aurelien 80
 
5 aurelien 81
	/**
105 aurelien 82
	 * Fonction de gestion des exceptions, remplace le handler par défaut
5 aurelien 83
	 */
84
	public static function gererException(Exception $e) {
120 aurelien 85
 
86
		// pour le moment on se contente de l'ajouter au tableau et de les afficher
87
		self::$exceptions[] = $e;
88
 
89
		if($e->getCode() == 0 || $e->getCode() >= error_reporting()) {
90
			echo $e->getCode().'   '.error_reporting();
91
			echo self::getExceptions();
92
			return;
93
		}
5 aurelien 94
	}
120 aurelien 95
 
96
	public static function gererErreur($niveau,  $message,  $fichier,  $ligne,  $contexte){
97
		// si aucun rapport d'error, on sort directement
98
		if (error_reporting() == 0)
99
		{
100
			return;
101
		}
102
 
103
		// sinon on crée une exception
104
		$e = new ErrorException($message, 0, $niveau, $fichier, $ligne);
105
		// que l'on donne au tableau d'exceptions
106
		self::$exceptions[] = $e;
107
	}
108
 
5 aurelien 109
	/**
110
	 * Renvoie les exceptions au format (X)HTML
111
	 * ou bien au format texte suivant le mode d'utilisation de PHP
112
	 */
120 aurelien 113
	public static function getExceptions() {
114 jp_milcent 114
		$retour = '';
120 aurelien 115
		foreach (self::$exceptions as $e) {
116
			switch(self::$mode) {
117
				case 'cli' :
98 jpm 118
					$retour .= $e->getMessage()."\n";
119
					$retour .= 'Fichier : '.$e->getFile()."\n";
120 aurelien 120
					$retour .= 'Ligne : '.$e->getLine()."\n";
98 jpm 121
					$retour .= 'Message : '.$e->getMessage()."\n";
122
					$retour .= 'Fichier : '.$e->getFile()."\n";
123
					$retour .= 'Ligne : '.$e->getLine()."\n";
120 aurelien 124
					if (self::getContexte()) {
98 jpm 125
						$retour .= 'Contexte : '."\n".print_r($e->getTraceAsString(), true)."\n";
126
					}
127
					break;
128
				default:
5 aurelien 129
					$retour .= '<pre class="debogage">'."\n";
130
					$retour .= htmlentities($e->getMessage())."\n";
131
					$retour .= '<span class="debogage_fichier">'.'Fichier : '.$e->getFile().'</span>'."\n";
132
					$retour .= '<span class="debogage_ligne">'.'Ligne : '.$e->getLine().'</span>'."\n";
133
					$retour .= '</pre>'."\n";
120 aurelien 134
 
135
					if (self::getContexte()) {
5 aurelien 136
						$retour .= '<pre>'."\n";
137
						$retour .= '<strong>Contexte : </strong>'."\n".print_r($e->getTraceAsString(), true)."\n";
138
						$retour .= '</pre>'."\n";
139
					}
98 jpm 140
			}
5 aurelien 141
		}
142
		return $retour;
143
	}
144
 
120 aurelien 145
}
5 aurelien 146
?>