Overview

Packages

  • Framework
  • None
  • PHP
  • Utilitaire

Classes

  • Bdd
  • Cache
  • CacheSimple
  • Chronometre
  • Cli
  • Config
  • Controleur
  • Debug
  • Framework
  • GestionnaireException
  • I18n
  • Log
  • Registre
  • RestClient
  • RestServeur
  • RestService
  • Script
  • SquelettePhp
  • Url
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: // declare(encoding='UTF-8');
  3: /**
  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:  *
  8:  * @category    PHP 5.2
  9:  * @package Framework
 10:  * @author      Jean-Pascal MILCENT <jpm@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
 13:  * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 
 14:  * @version $Id: Debug.php 366 2011-09-30 08:20:45Z jpm $
 15:  * @link        /doc/framework/
 16:  */
 17: class Debug {
 18:        
 19:     /** Paramètrer le fichier de config avec "php:Debug::MODE_ECHO" : les messages sont affichés en utilisant echo au moment 
 20:      * où ils sont déclenchés dans le code.*/
 21:     const MODE_ECHO = 'echo';
 22:     
 23:     /** Paramètrer le fichier de config avec "php:Debug::MODE_NOTICE" : les message sont stockés par le gestionnaire 
 24:     * d'exception sous forme d'erreur de type E_USER_NOTICE et sont renvoyés sur la sortie standard à la fin de l'execution 
 25:     * du programme (via echo).*/
 26:     const MODE_NOTICE = 'e_user_notice';
 27:     
 28:     /** Paramètrer le fichier de config avec "php:Debug::MODE_ENTETE_HTTP" : les message sont stockés par le gestionnaire 
 29:      * d'exception sous forme d'erreur de type E_USER_NOTICE et sont renvoyés dans un entête HTTP (X_REST_DEBOGAGE_MESSAGES) 
 30:      * à la fin de l'execution du programme.
 31:      * Surtout utile pour le Serveur REST. */
 32:     const MODE_ENTETE_HTTP = 'entete_http';
 33:     
 34:     /** Mode de php (cli ou sapi) */
 35:     protected static $mode = null;
 36:     
 37:     /** Tableau des noms des paramètres à définir dans le fichier de config car obligatoirement nécessaire à cette classe.*/
 38:     private static $parametres_obligatoires = array('debogage', 'debogage_mode');
 39:     
 40:     /**
 41:      * Accesseur pour le mode
 42:      * @return string le mode de php
 43:      */
 44:     public static function getMode() {
 45:         if (self::$mode === null) {
 46:             self::$mode = PHP_SAPI;
 47:         }
 48:         return self::$mode;
 49:     }
 50: 
 51:     /**
 52:      * Equivalent de var_dump
 53:      * @param mixed $variable la variable à dumper
 54:      * @param string $mot_cle le mot cle à associer à la variable
 55:      * @param boolean $echo si true on affiche le résultat, si false on ne renvoie que la chaine sans l'afficher
 56:      * @return string la chaine à afficher representant le dump ou null si echo
 57:      */
 58:     public static function dump($variable, $mot_cle = null, $echo = false) {
 59:         // var_dump de la variable dans un buffer et récupération de la sortie
 60:         ob_start();
 61:         var_dump($variable);
 62:         $sortie = ob_get_clean();
 63: 
 64:         // Pré-traitement de la sortie
 65:         $sortie = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $sortie);
 66: 
 67:         // Traitement général du débogage
 68:         return self::traiterDebogage($mot_cle, $sortie, $echo);
 69:     }
 70: 
 71:     /**
 72:      * Equivalent de print_r.
 73:      * @param mixed $variable la variable à afficher
 74:      * @param string $mot_cle le mot cle à associer
 75:      * @param boolean $echo faire un echo ou non
 76:      * @return string la chaine contenant la variable printée ou null si echo
 77:      */
 78:     public static function printr($variable, $mot_cle = null, $echo = false) {
 79:         // Récupération de la sortie
 80:         $sortie = print_r($variable, true);
 81: 
 82:         // Traitement général du débogage
 83:         return self::traiterDebogage($mot_cle, $sortie, $echo);
 84:     }
 85:     
 86:     /**
 87:      * Affichage d'informations sur l'espace mémoire occupé par une variable
 88:      * 
 89:      * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
 90:      * @since 0.3
 91:      * 
 92:      * @param mixed $var la variable dont on veut connaître l'empreinte mémoire.
 93:      * @param string $mot_cle le mot cle à associer
 94:      * @param boolean $echo faire un echo ou non
 95:      * 
 96:      * @return string la chaine d'information sur l'espace mémoire occupé ou bien null si echo
 97:      */
 98:     public static function tailleMemoireVar($var, $mot_cle = null, $echo = false) {
 99:         $memoire_depart = memory_get_usage();   
100:         $temp = unserialize(serialize($var));   
101:         $taille = memory_get_usage() - $memoire_depart;
102:         $sortie =  Fichier::convertirTaille($taille);
103:         return self::traiterDebogage($mot_cle, $sortie, $echo);
104:     }
105: 
106:     /**
107:      * Affichage d'informations sur l'espace mémoire occupé par le script PHP
108:      * 
109:      * @link http://forum.webmaster-rank.info/developpement-site/code-taille-memoire-d-une-variable-en-php-t1344.html
110:      * @since 0.3
111:      * 
112:      * @param string $mot_cle le mot cle à associer
113:      * @param boolean $echo faire un echo ou non
114:      * 
115:      * @return string la chaine d'information sur l'espace mémoire occupé ou bien null si echo
116:      */
117:     public static function tailleMemoireScript($mot_cle = null, $echo = false) {
118:         $sortie =  'Mémoire -- Utilisé : '.Fichier::convertirTaille(memory_get_usage(false)).
119:             ' || Alloué : '.
120:             Fichier::convertirTaille(memory_get_usage(true)) .
121:             ' || MAX Utilisé  : '.
122:             Fichier::convertirTaille(memory_get_peak_usage(false)).
123:             ' || MAX Alloué  : '.
124:             Fichier::convertirTaille(memory_get_peak_usage(true)).
125:             ' || MAX autorisé : '.
126:             ini_get('memory_limit');
127:         
128:         // Traitement général du débogage
129:         return self::traiterDebogage($mot_cle, $sortie, $echo);
130:     }
131:     
132:     /**
133:      * Traite une chaine de débogage et les mots clés associés
134:      * @param string  $mot_cle le mot à associer à la chaine
135:      * @param string  $sortie le chaine de debogage
136:      * @param boolean $echo faire un echo du resultat ou non
137:      * @return string la chaine de debogage formatée ou bien null si echo
138:      */
139:     private static function traiterDebogage($mot_cle, $sortie, $echo) {
140:         Config::verifierPresenceParametres(self::$parametres_obligatoires);
141:         $debogage = Config::get('debogage');
142:         $mode = Config::get('debogage_mode');
143:         
144:         $mot_cle = self::formaterMotCle($mot_cle);
145:         $sortie = self::traiterSortieSuivantMode($mot_cle, $sortie);
146: 
147:         // Affichage et/ou retour
148:         if ($debogage == true) {
149:             if ($echo === true || $mode == self::MODE_ECHO) {
150:                 echo $sortie;
151:                 return null;
152:             } else if ($mode == self::MODE_NOTICE || $mode == self::MODE_ENTETE_HTTP) {
153:                 trigger_error($sortie, E_USER_NOTICE);
154:                 return null; 
155:             } else {
156:                 return $sortie;
157:             }
158:         }
159:     }
160: 
161:     /**
162:      * formate un mot clé donné
163:      * @param string $mot_cle le mot clé à formaté
164:      * @return string le mot clé formaté ou bien un chaine vide le mot clé est null ou vide
165:      */
166:     private static function formaterMotCle($mot_cle) {
167:         return ($mot_cle === null) ? '' : rtrim($mot_cle).' ';
168:     }
169: 
170:     /**
171:      * traite la sortie de la chaine de débogage suivant le mode de php
172:      * @param string $mot_cle le mot clé associé à la chaine
173:      * @param string  $sortie la chaine de débogage
174:      * @return string la sortie formatée pour le mode en cours
175:      */
176:     private static function traiterSortieSuivantMode($mot_cle, $sortie) {
177:         $mode_actuel = Config::get('debogage_mode');
178:         if ($mode_actuel == self::MODE_ENTETE_HTTP) {
179:             $cle = (empty($mot_cle)) ? 'message' : $mot_cle;
180:             $sortie = "$cle:$sortie";
181:         } else {
182:             $corps = $mot_cle.PHP_EOL.$sortie;
183:             if (self::getMode() == 'cli') {
184:                 $sortie = PHP_EOL.$corps.PHP_EOL;
185:             } else {
186:                 $sortie = '<pre>'.$corps.'</pre>';
187:             }
188:         }
189:         return $sortie;
190:     }
191: }
192: ?>
TBFramework - v0.3 API documentation generated by ApiGen 2.8.0