Rev 122 | Rev 130 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php//declare(encoding='UTF-8');/*** PHP Version 5** @category PHP* @package framework* @author aurelien <aurelien@tela-botanica.org>* @copyright 2009 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @version SVN: <svn_id>* @link /doc/framework/*/class Log {/*** Tableau associatif stockant les descripteurs de fichiers*/private static $fichiersLog = array();/*** Chemin de base du dossier log de l'application*/private static $cheminLogs = '';/*** Booleen indiquant si l'on peut correctement écrire dans les fichiers de logs*/private static $droitLogger = true;/*** Zone horaire (pour éviter des avertissements dans les dates)*/private static $timeZone = '';/*** séparateur de chemin*/private static $sd = DIRECTORY_SEPARATOR;/*** La classe registre se contient elle-même, (pour le pattern singleton)*/private static $log;/*** Constructeur par défaut, privé, car on accède à la classe par le getInstance*/private function __construct() {self::$sd = Config::get('ds');self::$cheminLogs = Config::get('chemin_logs');self::$timeZone = Config::get('fw_timezone');// gestion de la timezone pour éviter des erreursif(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) {date_default_timezone_set(self::$timeZone);}}/*** Fonction qui renvoie l'instance de classe en assurant son unicité, c'est l'unique méthode qui doit être* utilisée pour récupérer l'objet Registre*/public static function getInstance() {if (self::$log instanceof Log) {return self::$log;}self::$log = new Log();return self::$log;}/*** Ajoute une entrée au log spécifié par le paramètre $nomFichier* @param string $nomFichier le nom du fichier dans lequel écrire*/public static function ajouterEntree($nomFichier,$entree,$mode='a+') {if(self::$droitLogger) {$date = "\n"."\n".date('d m Y H:i')."\n" ;// si le fichier est déjà dans le tableau et qu'on peut y écrireif(in_array($nomFichier,self::$fichiersLog)) {if(is_writable(self::$cheminLogs.$nomFichier)) {fwrite(self::$fichiersLog[$nomFichier],$date.$entree);} else {self::desactiverEcriture($nomFichier);}} else {$fp = fopen(self::$cheminLogs.$nomFichier,$mode);if($fp) {if(is_writable(self::$cheminLogs.$nomFichier)) {self::$fichiersLog[$nomFichier] = $fp;fwrite(self::$fichiersLog[$nomFichier],$date.$entree);} else {self::desactiverEcriture($nomFichier);}} else {self::desactiverEcriture($nomFichier);}}}}/*** Vide un fichier log indiqué* @param string $nomFichier le nom du fichier à vider*/public static function viderLog($nomFichier) {if(self::verifierPresenceFichier($nomFichier)) {ajouterEntree($nomFichier,'','w');}}/*** Vérifie la présence d'un fichier dans le tableau (et bientot plein* d'autres choses).* @param string $nomFichier le nom du fichier dont on doit vérifier la présence* @return boolean vrai si le fichier est dans le tableau, faux sinon*/public static function verifierPresenceFichier($nomFichier) {if(in_array($nomFichier,self::$fichiersLog)) {return true;}return false;}/*** Désactive l'écriture du log et envoie un message au gestionnaire d'erreurs* @param string $nomFichier le nom du fichier qui a causé l'erreur*/private static function desactiverEcriture($nomFichier) {self::$droitLogger = false;$message = 'Ecriture impossible dans le fichier '.$nomFichier.', Assurez-vous des droits du dossier de logs et du fichier';$e = new ErrorException($message,0,E_USER_WARNING,__FILE__,__LINE__);GestionnaireException::gererException($e);}/*** destructeur de classe, ferme les descripteurs ouverts*/public function __destruct() {foreach(self::$fichiersLog as $nomFichier => $fp) {fclose($fp);}}}?>