Overview

Packages

  • Framework
  • PHP

Classes

  • Application
  • Chronometre
  • Config
  • Controleur
  • Debug
  • GestionnaireException
  • I18n
  • Log
  • Modele
  • Registre
  • SquelettePhp
  • Url

Functions

  • autoloadAppliDefaut
  • autoloadFw
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: // declare(encoding='UTF-8');
  3: /** Classe Chronometre() - Permet de stocker et d'afficher les temps d'éxécution de script.
  4:  *
  5:  * Cette classe permet de réaliser un ensemble de mesure de temps prises à différents endroits d'un script.
  6:  * Ces mesures peuvent ensuite être affichées au sein d'un tableau XHTML.
  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     GNU-GPL-v3 <http://www.gnu.org/licenses/gpl.html>
 13:  * @license     CECILL-v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
 14:  */
 15: class Chronometre {
 16:     /*** Attributs : ***/
 17:     private static $instance = null;
 18:     private static $temps = array();
 19: 
 20:     /** Constructeur : **/
 21:     private function __construct() {
 22:         self::setTemps('depart', microtime());
 23:     }
 24: 
 25:     /** Accesseurs :
 26:      *
 27:      * @param string $cle la cle associée à un chronomètre particulier
 28:      *
 29:      * @return int le temps écoulé
 30:      */
 31:     private static function getTemps($cle = null) {
 32:         $temps = '';
 33:         if (!is_null($cle)) {
 34:             $temps = self::$temps[$cle];
 35:         } else {
 36:             $temps = self::$temps;
 37:         }
 38:         return $temps;
 39:     }
 40: 
 41:     /** Setteur pour la variable temps
 42:      *
 43:      * @param array() $moment ajoute des points de chronométrage au tableau _temps
 44:      *
 45:      * @return null
 46:      */
 47:     private static function setTemps($cle, $moment) {
 48:         array_push(self::$temps, array($cle => $moment));
 49:     }
 50: 
 51:     /*** Méthodes : ***/
 52: 
 53:     /**
 54:      *  Effectue un chronometrage.
 55:      *
 56:      * @param string le nom du point de chronométrage
 57:      * @return null
 58:      */
 59:     public static function chrono($cle) {
 60:         $moment = microtime();
 61:         self::verifierCreationInstance();
 62:         self::setTemps($cle, $moment);
 63:     }
 64: 
 65:     /**
 66:     * Permet d'afficher les temps d'éxécution de différentes parties d'un script.
 67:     *
 68:     * Cette fonction permet d'afficher un ensemble de  mesure de temps prises à différents endroits d'un script.
 69:     * Ces mesures sont affichées au sein d'un tableau XHTML dont on peut controler l'indentation des balises.
 70:     * Pour un site en production, il suffit d'ajouter un style #chrono {display:none;} dans la css.
 71:     * De cette façon, le tableau ne s'affichera pas. Le webmaster lui pourra rajouter sa propre feuille de style
 72:     * affichant le tableau.
 73:     * Le développeur initial de cette fonction est Loic d'Anterroches.
 74:     * Elle a été modifiée par Jean-Pascal Milcent.
 75:     *
 76:     * @author   Loic d'Anterroches
 77:     * @author   Jean-Pascal MILCENT <jpm@tela-botanica.org>
 78:     *
 79:     * @param    int  $indentation_origine l'indentation de base.
 80:     * @param    int  $indentation le pas d'indentation.
 81:     * @return   string  la chaine XHTML de mesure des temps.
 82:     */
 83:     public static function afficherChrono($indentation_origine = 8, $indentation = 4) {
 84:         self::verifierCreationInstance();
 85:         // Création du chrono de fin
 86:         self::setTemps('fin', microtime());
 87: 
 88:         // Début création de l'affichage
 89:         $sortie = str_repeat(' ', $indentation_origine) .
 90:         '<table id="chrono" lang="fr" summary="Résultat du
 91:             chronométrage du programme affichant la page actuelle.">' . "\n";
 92:         $sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) .
 93:         '<caption>Chronométrage</caption>' . "\n";
 94:         $sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) .
 95:         '<thead>' . "\n";
 96:         $sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 2))) .
 97:         '<tr><th>Action</th><th>Temps écoulé (en s.)</th>
 98:         <th>Cumul du temps écoulé (en s.)</th></tr>' . "\n";
 99:         $sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) .
100:         '</thead>' . "\n";
101: 
102:         $tbody = str_repeat(' ', ($indentation_origine + ($indentation * 1))) .
103:         '<tbody>' . "\n";
104: 
105:         $total_tps_ecoule = 0;
106: 
107:         // Récupération de la premiére mesure
108:         $tab_depart = self::getTemps(0);
109:         list ($usec, $sec) = explode(' ', $tab_depart['depart']);
110: 
111:         // Ce temps correspond à tps_fin
112:         $tps_debut = ((float) $usec + (float) $sec);
113: 
114:         foreach (self::getTemps() as $tab_temps) {
115:             foreach ($tab_temps as $cle => $valeur) {
116:                 list ($usec, $sec) = explode(' ', $valeur);
117:                 $tps_fin = ((float) $usec + (float) $sec);
118: 
119:                 $tps_ecoule = abs($tps_fin - $tps_debut);
120:                 $total_tps_ecoule += $tps_ecoule;
121: 
122:                 $tbody .= str_repeat(' ',
123:                                 ($indentation_origine + ($indentation * 2))) .
124:                 '<tr>' .
125:                 '<th>' . $cle . '</th>' .
126:                 '<td>' . number_format($tps_ecoule, 3, ',', ' ') . '</td>' .
127:                 '<td>' . number_format($total_tps_ecoule, 3, ',', ' ') . '</td>' .
128:                 '</tr>' . "\n";
129:                 $tps_debut = $tps_fin;
130:             }
131:         }
132:         $tbody .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) .
133:         '</tbody>' . "\n";
134: 
135:         $sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) .
136:         '<tfoot>' . "\n";
137:         $sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 2))) .
138:         '<tr>' .
139:         '<th>' . 'Total du temps écoulé (en s.)' . '</th>' .
140:         '<td colspan="2">' .
141:             number_format($total_tps_ecoule, 3, ',', ' ') . '</td>' .
142:         '</tr>' . "\n";
143:         $sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))) .
144:         '</tfoot>' . "\n";
145:         $sortie .= $tbody;
146:         $sortie .= str_repeat(' ', $indentation_origine) .
147:         '</table>' . "\n";
148: 
149:         return $sortie;
150:     }
151: 
152:     /**
153:      * Vérifie si l'instance de classe à été crée, si non la crée
154:      */
155:     private static function verifierCreationInstance() {
156:         if (empty(self::$instance)) {
157:             self::$instance = new Chronometre();
158:         }
159:     }
160: }
161: ?>
TBFramework - v0.2 API documentation generated by ApiGen 2.8.0