Subversion Repositories Applications.framework

Rev

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

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