Subversion Repositories Applications.framework

Rev

Rev 218 | Rev 237 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 218 Rev 232
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe fournissant des fonctions de débogage équivalante à var_dump et print_r.
4
 * Classe fournissant des fonctions de débogage équivalante à var_dump et print_r.
5
 * L'affichage et l'utilisation de ces fonctions sont améliorés via cette classe.
5
 * L'affichage et l'utilisation de ces fonctions sont améliorés via cette classe.
6
 * Cette classe est inspirée de la classe Zend_Debug.
6
 * Cette classe est inspirée de la classe Zend_Debug.
7
 *
7
 *
8
 * @category	PHP 5.2
8
 * @category	PHP 5.2
9
 * @package	Framework
9
 * @package	Framework
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @copyright	Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
11
 * @copyright	Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
12
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
12
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
13
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 
13
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 
14
 * @version	SVN : $Id: Debug.php 218 2010-11-10 11:32:39Z jpm $
14
 * @version	$Id: Debug.php 232 2010-11-19 17:12:58Z jpm $
15
 * @link		/doc/framework/
15
 * @link		/doc/framework/
16
 */
16
 */
17
class Debug {
17
class Debug {
18
 
18
 
19
	const MODE_ECHO = 'echo';
19
	const MODE_ECHO = 'echo';
20
	const MODE_NOTICE = 'e_user_notice';
20
	const MODE_NOTICE = 'e_user_notice';
21
	
21
	
22
	/**
22
	/**
23
	 * mode de php (cli ou sapi)
23
	 * mode de php (cli ou sapi)
24
	 */
24
	 */
25
	protected static $mode = null;
25
	protected static $mode = null;
26
 
26
 
27
	/**
27
	/**
28
	 * Accesseur pour le mode
28
	 * Accesseur pour le mode
29
	 * @return string le mode de php
29
	 * @return string le mode de php
30
	 */
30
	 */
31
	public static function getMode() {
31
	public static function getMode() {
32
		if (self::$mode === null) {
32
		if (self::$mode === null) {
33
			self::$mode = PHP_SAPI;
33
			self::$mode = PHP_SAPI;
34
		}
34
		}
35
		return self::$mode;
35
		return self::$mode;
36
	}
36
	}
37
 
37
 
38
	/**
38
	/**
39
	 * Equivalent de var_dump
39
	 * Equivalent de var_dump
40
	 * @param mixed $variable la variable à dumper
40
	 * @param mixed $variable la variable à dumper
41
	 * @param string $mot_cle le mot cle à associer à la variable
41
	 * @param string $mot_cle le mot cle à associer à la variable
42
	 * @param boolean $echo si true on affiche le résultat, si false on ne renvoie que la chaine sans l'afficher
42
	 * @param boolean $echo si true on affiche le résultat, si false on ne renvoie que la chaine sans l'afficher
43
	 * @return string la chaine à afficher representant le dump ou null si echo
43
	 * @return string la chaine à afficher representant le dump ou null si echo
44
	 */
44
	 */
45
	public static function dump($variable, $mot_cle = null, $echo = false) {
45
	public static function dump($variable, $mot_cle = null, $echo = false) {
46
		// var_dump de la variable dans un buffer et récupération de la sortie
46
		// var_dump de la variable dans un buffer et récupération de la sortie
47
		ob_start();
47
		ob_start();
48
		var_dump($variable);
48
		var_dump($variable);
49
		$sortie = ob_get_clean();
49
		$sortie = ob_get_clean();
50
 
50
 
51
		// Pré-traitement de la sortie
51
		// Pré-traitement de la sortie
52
		$sortie = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $sortie);
52
		$sortie = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $sortie);
53
 
53
 
54
		// Traitement général du débogage
54
		// Traitement général du débogage
55
		return self::traiterDebogage($mot_cle, $sortie, $echo);
55
		return self::traiterDebogage($mot_cle, $sortie, $echo);
56
	}
56
	}
57
 
57
 
58
	/**
58
	/**
59
	 * Equivalent de print_r.
59
	 * Equivalent de print_r.
60
	 * @param mixed $variable la variable à afficher
60
	 * @param mixed $variable la variable à afficher
61
	 * @param string $mot_cle le mot cle à associer
61
	 * @param string $mot_cle le mot cle à associer
62
	 * @param boolean $echo faire un echo ou non
62
	 * @param boolean $echo faire un echo ou non
63
	 * @return string la chaine contenant la variable printée ou null si echo
63
	 * @return string la chaine contenant la variable printée ou null si echo
64
	 */
64
	 */
65
	public static function printr($variable, $mot_cle = null, $echo = false) {
65
	public static function printr($variable, $mot_cle = null, $echo = false) {
66
		// Récupération de la sortie
66
		// Récupération de la sortie
67
		$sortie = print_r($variable, true);
67
		$sortie = print_r($variable, true);
68
 
68
 
69
		// Traitement général du débogage
69
		// Traitement général du débogage
70
		return self::traiterDebogage($mot_cle, $sortie, $echo);
70
		return self::traiterDebogage($mot_cle, $sortie, $echo);
71
	}
71
	}
72
	
72
	
73
	/**
73
	/**
74
	 * Affichage d'informations sur l'espace mémoire occupé par une variable
74
	 * Affichage d'informations sur l'espace mémoire occupé par une variable
-
 
75
	 * 
75
	 * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
76
	 * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
-
 
77
	 * @since 0.3
-
 
78
	 * 
76
	 * @param mixed $var la variable dont on veut connaître l'empreinte mémoire.
79
	 * @param mixed $var la variable dont on veut connaître l'empreinte mémoire.
77
	 * @param string $mot_cle le mot cle à associer
80
	 * @param string $mot_cle le mot cle à associer
78
	 * @param boolean $echo faire un echo ou non
81
	 * @param boolean $echo faire un echo ou non
79
	 * 
82
	 * 
80
	 * @return string la chaine d'information sur l'espace mémoire occupé ou bien null si echo
83
	 * @return string la chaine d'information sur l'espace mémoire occupé ou bien null si echo
81
	 */
84
	 */
82
	public static function tailleMemoireVar($var, $mot_cle = null, $echo = false) {
85
	public static function tailleMemoireVar($var, $mot_cle = null, $echo = false) {
83
		$memoire_depart = memory_get_usage();   
86
		$memoire_depart = memory_get_usage();   
84
		$temp = unserialize(serialize($var));   
87
		$temp = unserialize(serialize($var));   
85
		$taille = memory_get_usage() - $memoire_depart;
88
		$taille = memory_get_usage() - $memoire_depart;
86
		$sortie =  Fichier::convertirTaille($taille);
89
		$sortie =  Fichier::convertirTaille($taille);
87
		return self::traiterDebogage($mot_cle, $sortie, $echo);
90
		return self::traiterDebogage($mot_cle, $sortie, $echo);
88
	}
91
	}
89
 
92
 
90
	/**
93
	/**
91
	 * Affichage d'informations sur l'espace mémoire occupé par le script PHP
94
	 * Affichage d'informations sur l'espace mémoire occupé par le script PHP
-
 
95
	 * 
92
	 * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
96
	 * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
-
 
97
	 * @since 0.3
-
 
98
	 * 
93
	 * @param string $mot_cle le mot cle à associer
99
	 * @param string $mot_cle le mot cle à associer
94
	 * @param boolean $echo faire un echo ou non
100
	 * @param boolean $echo faire un echo ou non
95
	 * 
101
	 * 
96
	 * @return string la chaine d'information sur l'espace mémoire occupé ou bien null si echo
102
	 * @return string la chaine d'information sur l'espace mémoire occupé ou bien null si echo
97
	 */
103
	 */
98
	public static function tailleMemoireScript($mot_cle = null, $echo = false) {
104
	public static function tailleMemoireScript($mot_cle = null, $echo = false) {
99
		$sortie =  'Mémoire -- Utilisé : '.Fichier::convertirTaille(memory_get_usage(false)).
105
		$sortie =  'Mémoire -- Utilisé : '.Fichier::convertirTaille(memory_get_usage(false)).
100
			' || Alloué : '.
106
			' || Alloué : '.
101
			Fichier::convertirTaille(memory_get_usage(true)) .
107
			Fichier::convertirTaille(memory_get_usage(true)) .
102
			' || MAX Utilisé  : '.
108
			' || MAX Utilisé  : '.
103
			Fichier::convertirTaille(memory_get_peak_usage(false)).
109
			Fichier::convertirTaille(memory_get_peak_usage(false)).
104
			' || MAX Alloué  : '.
110
			' || MAX Alloué  : '.
105
			Fichier::convertirTaille(memory_get_peak_usage(true)).
111
			Fichier::convertirTaille(memory_get_peak_usage(true)).
106
			' || MAX autorisé : '.
112
			' || MAX autorisé : '.
107
			ini_get('memory_limit');
113
			ini_get('memory_limit');
108
		
114
		
109
		// Traitement général du débogage
115
		// Traitement général du débogage
110
		return self::traiterDebogage($mot_cle, $sortie, $echo);
116
		return self::traiterDebogage($mot_cle, $sortie, $echo);
111
	}
117
	}
112
	
118
	
113
	/**
119
	/**
114
	 * Traite une chaine de débogage et les mots clés associés
120
	 * Traite une chaine de débogage et les mots clés associés
115
	 * @param string  $mot_cle le mot à associer à la chaine
121
	 * @param string  $mot_cle le mot à associer à la chaine
116
	 * @param string  $sortie le chaine de debogage
122
	 * @param string  $sortie le chaine de debogage
117
	 * @param boolean $echo faire un echo du resultat ou non
123
	 * @param boolean $echo faire un echo du resultat ou non
118
	 * @return string la chaine de debogage formatée ou bien null si echo
124
	 * @return string la chaine de debogage formatée ou bien null si echo
119
	 */
125
	 */
120
	private static function traiterDebogage($mot_cle, $sortie, $echo) {
126
	private static function traiterDebogage($mot_cle, $sortie, $echo) {
121
		// Formate le mot-clé
127
		// Formate le mot-clé
122
		$mot_cle = self::formaterMotCle($mot_cle);
128
		$mot_cle = self::formaterMotCle($mot_cle);
123
 
129
 
124
		// Traitement de la sortie
130
		// Traitement de la sortie
125
		$sortie = self::traiterSortieSuivantMode($mot_cle, $sortie);
131
		$sortie = self::traiterSortieSuivantMode($mot_cle, $sortie);
126
 
132
 
127
		// Affichage et/ou retour
133
		// Affichage et/ou retour
128
		self::verifierParametresConfig();
134
		self::verifierParametresConfig();
129
		if (Config::get('fw_debogage') == true) {
135
		if (Config::get('fw_debogage') == true) {
130
			if ($echo === true || Config::get('fw_debogage_mode') == self::MODE_ECHO) {
136
			if ($echo === true || Config::get('fw_debogage_mode') == self::MODE_ECHO) {
131
				echo $sortie;
137
				echo $sortie;
132
				return null;
138
				return null;
133
			} else if (Config::get('fw_debogage_mode') == self::MODE_NOTICE) {
139
			} else if (Config::get('fw_debogage_mode') == self::MODE_NOTICE) {
134
				trigger_error($sortie, E_USER_NOTICE);
140
				trigger_error($sortie, E_USER_NOTICE);
135
				return null; 
141
				return null; 
136
			} else {
142
			} else {
137
				return $sortie;
143
				return $sortie;
138
			}
144
			}
139
		}
145
		}
140
	}
146
	}
141
 
147
 
142
	/**
148
	/**
143
	 * formate un mot clé donné
149
	 * formate un mot clé donné
144
	 * @param string $mot_cle le mot clé à formaté
150
	 * @param string $mot_cle le mot clé à formaté
145
	 * @return string le mot clé formaté ou bien un chaine vide le mot clé est null ou vide
151
	 * @return string le mot clé formaté ou bien un chaine vide le mot clé est null ou vide
146
	 */
152
	 */
147
	private static function formaterMotCle($mot_cle) {
153
	private static function formaterMotCle($mot_cle) {
148
		return ($mot_cle === null) ? '' : rtrim($mot_cle).' ';
154
		return ($mot_cle === null) ? '' : rtrim($mot_cle).' ';
149
	}
155
	}
150
 
156
 
151
	/**
157
	/**
152
	 * traite la sortie de la chaine de débogage suivant le mode de php
158
	 * traite la sortie de la chaine de débogage suivant le mode de php
153
	 * @param string $mot_cle le mot clé associé à la chaine
159
	 * @param string $mot_cle le mot clé associé à la chaine
154
	 * @param string  $sortie la chaine de débogage
160
	 * @param string  $sortie la chaine de débogage
155
	 * @return string la sortie formatée pour le mode en cours
161
	 * @return string la sortie formatée pour le mode en cours
156
	 */
162
	 */
157
	private static function traiterSortieSuivantMode($mot_cle, $sortie) {
163
	private static function traiterSortieSuivantMode($mot_cle, $sortie) {
158
		$corps = $mot_cle.PHP_EOL.$sortie;
164
		$corps = $mot_cle.PHP_EOL.$sortie;
159
		if (self::getMode() == 'cli') {
165
		if (self::getMode() == 'cli') {
160
			$sortie = PHP_EOL.$corps.PHP_EOL;
166
			$sortie = PHP_EOL.$corps.PHP_EOL;
161
		} else {
167
		} else {
162
			$sortie = '<pre>'.$corps.'</pre>';
168
			$sortie = '<pre>'.$corps.'</pre>';
163
		}
169
		}
164
		return $sortie;
170
		return $sortie;
165
	}
171
	}
166
	
172
	
167
	/**
173
	/**
168
	 * Vérifie que tous les paramêtres de config nécessaires au fonctionnement de cette classe existe dans les fichiers
174
	 * Vérifie que tous les paramêtres de config nécessaires au fonctionnement de cette classe existe dans les fichiers
169
	 * de configurations.
175
	 * de configurations.
170
	 */
176
	 */
171
	private static function verifierParametresConfig() {
177
	private static function verifierParametresConfig() {
172
		$ok = true;
178
		$ok = true;
173
		$parametres = array('fw_debogage', 'fw_debogage_mode');
179
		$parametres = array('fw_debogage', 'fw_debogage_mode');
174
		foreach ($parametres as $param) {
180
		foreach ($parametres as $param) {
175
			if (is_null(Config::get($param))) {
181
			if (is_null(Config::get($param))) {
176
				$classe = get_class();
182
				$classe = get_class();
177
				$m = "L'utilisation de la classe $classe nécessite de définir '$param' dans un fichier de configuration.";
183
				$m = "L'utilisation de la classe $classe nécessite de définir '$param' dans un fichier de configuration.";
178
				trigger_error($m, E_USER_WARNING);
184
				trigger_error($m, E_USER_WARNING);
179
				$ok = false;
185
				$ok = false;
180
			}
186
			}
181
		}
187
		}
182
		return $ok;
188
		return $ok;
183
	}
189
	}
184
}
190
}
185
?>
191
?>