Subversion Repositories Applications.framework

Rev

Rev 123 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
122 aurelien 1
<?php
2
//declare(encoding='UTF-8');
3
/**
4
* PHP Version 5
5
*
6
* @category  PHP
7
* @package   framework
8
* @author    aurelien <aurelien@tela-botanica.org>
9
* @copyright 2009 Tela-Botanica
10
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
* @version   SVN: <svn_id>
12
* @link      /doc/framework/
13
*/
14
 
15
class Log {
16
 
17
    /**
18
     * Tableau associatif stockant les descripteurs de fichiers
19
     */
20
    private static $fichiersLog = array();
21
 
22
    /**
23
     * Chemin de base du dossier log de l'application
24
     */
25
    private static $cheminLogs = '';
26
 
27
    /**
28
     * Booleen indiquant si l'on peut correctement écrire dans les fichiers de logs
29
     */
30
     private static $droitLogger = true;
31
 
32
    /**
33
     * Zone horaire (pour éviter des avertissements dans les dates)
34
     */
35
    private static $timeZone = '';
36
 
37
    /**
38
     * séparateur de chemin
39
     */
40
    private static $sd = DIRECTORY_SEPARATOR;
41
 
42
    /**
43
     * La classe registre se contient elle-même, (pour le pattern singleton)
44
     */
45
    private static $log;
46
 
47
    /**
48
     * Constructeur par défaut, privé, car on accède à la classe par le getInstance
49
     */
50
    private function __construct() {
51
       self::$sd = Config::get('ds');
52
       self::$cheminLogs = Config::get('chemin_logs');
53
       self::$timeZone = Config::get('fw_timezone');
54
 
55
       // gestion de la timezone pour éviter des erreurs
56
       if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) {
57
           date_default_timezone_set(self::$timeZone);
58
       }
59
    }
60
 
61
    /**
62
     * Fonction qui renvoie l'instance de classe en assurant son unicité, c'est l'unique méthode qui doit être
63
     * utilisée pour récupérer l'objet Registre
64
     */
65
    public static function getInstance() {
66
        if (self::$log instanceof Log) {
67
            return self::$log;
68
        }
69
        self::$log = new Log();
70
        return self::$log;
71
    }
72
 
73
    public static function ajouterEntree($nomFichier,$entree,$mode='a+') {
74
        if(self::$droitLogger) {
75
            $date = "\n"."\n".date('d m Y H:i')."\n" ;
76
 
77
            // si le fichier est déjà dans le tableau et qu'on peut y écrire
78
            if(in_array($nomFichier,self::$fichiersLog)) {
79
                if(is_writable(self::$fichiersLog[$nomFichier])) {
80
            	   fwrite(self::$fichiersLog[$nomFichier],$date.$entree);
81
                } else {
82
                	self::desactiverEcriture();
83
                }
84
            } else {
85
                if($fp = fopen(self::$cheminLogs.$nomFichier,'a+') && is_writable($fp)) {
86
                	self::$fichiersLog[$nomFichier] = $fp;
87
                    fwrite(self::$fichiersLog[$nomFichier],$date.$entree);
88
                } else {
89
                    self::desactiverEcriture();
90
                }
91
            }
92
        }
93
    }
94
 
95
    public static function viderLog($nomFichier) {
96
        if(self::verifierPresenceFichier($nomFichier)) {
97
            ajouterEntree($nomFichier,'','w');
98
        }
99
    }
100
 
101
    public static function verifierPresenceFichier($nomFichier) {
102
        if(in_array($nomFichier,self::$fichiersLog)) {
103
            return true;
104
        }
105
        return false;
106
    }
107
 
108
    private static function desactiverEcriture() {
109
        self::$droitLogger = false;
110
        $message = 'Impossible d\'écrire dans le fichier de log spécifié, Vérifiez les droits du dossier de logs et du fichier';
111
        $e = new ErrorException($message,0,E_USER_WARNING,__FILE__,__LINE__);
112
        GestionnaireException::gererException($e);
113
    }
114
 
115
    public function __destruct() {
116
    	foreach(self::$fichiersLog as $nomFichier => $fp) {
117
    		fclose($fp);
118
    	}
119
    }
120
}
121
?>