Rev 123 | 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;}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::$fichiersLog[$nomFichier])) {fwrite(self::$fichiersLog[$nomFichier],$date.$entree);} else {self::desactiverEcriture();}} else {if($fp = fopen(self::$cheminLogs.$nomFichier,'a+') && is_writable($fp)) {self::$fichiersLog[$nomFichier] = $fp;fwrite(self::$fichiersLog[$nomFichier],$date.$entree);} else {self::desactiverEcriture();}}}}public static function viderLog($nomFichier) {if(self::verifierPresenceFichier($nomFichier)) {ajouterEntree($nomFichier,'','w');}}public static function verifierPresenceFichier($nomFichier) {if(in_array($nomFichier,self::$fichiersLog)) {return true;}return false;}private static function desactiverEcriture() {self::$droitLogger = false;$message = 'Impossible d\'écrire dans le fichier de log spécifié, Vérifiez les droits du dossier de logs et du fichier';$e = new ErrorException($message,0,E_USER_WARNING,__FILE__,__LINE__);GestionnaireException::gererException($e);}public function __destruct() {foreach(self::$fichiersLog as $nomFichier => $fp) {fclose($fp);}}}?>