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 Cache permettant de mettre en cache des données de façon extremement simple.
  5:  * Le cache est stocker dans des fichiers textes.
  6:  * Le contrôle de la durée de vie du cache se fait avec la fonction PHP filemtime.
  7:  * Si la durée de vie du cache est modifiée dans le constructeur ou le fichier de config, alors la durée de vie de l'ensemble
  8:  * des fichiers de cache est modifiée en conséquence.
  9:  * Les clés pour le tableau des options et les valeurs par défaut sont indiquées dans l'attribut options de la classe.
 10:  *
 11:  * @category    php 5.2
 12:  * @package Framework
 13:  * @author      Jean-Pascal MILCENT <jpm@tela-botanica.org>
 14:  * @author      Aurélien PERONNET <aurelien@tela-botanica.org>
 15:  * @copyright   Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
 16:  * @license http://framework.zend.com/license/new-bsd Licence New BSD
 17:  * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
 18:  * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
 19:  * @version $Id: CacheSimple.php 445 2013-10-24 17:08:14Z raphael $
 20:  * @link        /doc/framework/
 21:  */
 22: // TODO : voir ce qui est le plus pratique : error_log ou le gestionnaire de bogue du framework
 23: class CacheSimple {
 24: 
 25:     private $mise_en_cache = null;
 26:     private $stockage_chemin = null;
 27:     private $duree_de_vie = null;
 28: 
 29:     private $options = array(
 30:         'mise_en_cache' => 'true',
 31:         'stockage_chemin' => 'Fichier::getDossierTmp()',
 32:         'duree_de_vie' => '3600*24'
 33:     );
 34: 
 35:     public function __construct($options = array()) {
 36:         extract($options);
 37:         $this->mise_en_cache = is_bool($mise_en_cache) ? $mise_en_cache : $mise_en_cache == '' ? false : true;
 38: 
 39:         if ($this->mise_en_cache) {
 40:             $this->stockage_chemin = isset($stockage_chemin) ? realpath($stockage_chemin) : Fichier::getDossierTmp();
 41:             if (!realpath($stockage_chemin)) {
 42:                 error_log(sprintf("%s: Attention, %s invalide: creation [%s]",
 43:                     __FILE__,
 44:                     $stockage_chemin,
 45:                     @$_SERVER['REQUEST_URI']));
 46:                 mkdir($stockage_chemin, 0755, TRUE);
 47:             }
 48:             if (!realpath($stockage_chemin)) {
 49:                 error_log(sprintf("%s: Attention, realpath(%s) invalide [%s]",
 50:                     __FILE__,
 51:                     $stockage_chemin,
 52:                     @$_SERVER['REQUEST_URI']));
 53:             } else if(!is_writable(realpath($stockage_chemin))) {
 54:                 error_log(sprintf("%s: Attention, realpath(%s) non-inscriptible [%s]",
 55:                     __FILE__,
 56:                     realpath($stockage_chemin),
 57:                     @$_SERVER['REQUEST_URI']));
 58:             } else {
 59:                 $this->duree_de_vie = isset($duree_de_vie) ? $duree_de_vie : 3600*24;
 60:             }
 61:         }
 62:     }
 63: 
 64:     private function initialiserOptionsParConfig() {
 65:         while (list($nom, $valeur) = each($this->options)) {
 66:             if (Config::existe($nom)) {
 67:                 $this->$nom = Config::get($nom);
 68:             }
 69:         }
 70:     }
 71: 
 72:     /**
 73:      * Teste si le cache est disponible pour l'id donné et (si oui) le retourne (sinon renvoie false)
 74:      *
 75:      * @param  string  $id l'identifiant du Cache.
 76:      * @return string|false les données en cache.
 77:      */
 78:     public function charger($id) {
 79:         $contenu = false;
 80:         if ($this->mise_en_cache) {
 81:             $chemin_fichier_cache = $this->stockage_chemin.DS.$id.'.txt';
 82:             if (file_exists($chemin_fichier_cache ) && (time() - @filemtime($chemin_fichier_cache) < $this->duree_de_vie)) {
 83:                 $contenu = file_get_contents($chemin_fichier_cache);
 84:             }
 85:         }
 86:         return $contenu;
 87:     }
 88: 
 89:     /**
 90:      * Sauvegarde la chaine de données dans un fichier texte.
 91:      *
 92:      * Note : $contenu est toujours de type "string". C'est à vous de gérer la sérialisation.
 93:      *
 94:      * @param  string $contenu les données à mettre en cache.
 95:      * @param  string $id   l'identifiant du Cache.
 96:      * @return boolean true si aucun problème
 97:      */
 98:     public function sauver($contenu, $id) {
 99:         if (! $this->mise_en_cache) return FALSE;
100: 
101:         $ok = false;
102:         $chemin_fichier_cache = $this->stockage_chemin.DS.$id.'.txt';
103:         if (!file_exists($chemin_fichier_cache) || (time() - @filemtime($chemin_fichier_cache) > $this->duree_de_vie)) {
104:             $dossier_fichier_cache = dirname($chemin_fichier_cache);
105:             if (!is_dir($dossier_fichier_cache))
106:                 {
107:                     mkdir($dossier_fichier_cache, 0755, true);
108:                 }
109: 
110:             $fh = fopen($chemin_fichier_cache,'w+');
111:             if ($fh) {
112:                 if (fwrite($fh, $contenu)) {
113:                     if (fclose($fh)) {
114:                         error_log(sprintf("%s: caching \"%s\" [%s]", __FILE__, $chemin_fichier_cache, @$_SERVER['REQUEST_URI']));
115: 
116:                         $ok = true;
117:                     }
118:                 }
119:                 // Voir #ZF-4422 pour la raison de l'utilisation de octdec()
120:                 @chmod($chemin_fichier_cache,  octdec('0777'));
121:             }
122:         }
123:         if(!$ok) error_log(sprintf("%s: ERROR trying to cache \"%s\" [%s]", __FILE__, $chemin_fichier_cache, @$_SERVER['REQUEST_URI']));
124:         return $ok;
125:     }
126: }
127: 
API documentation generated by ApiGen 2.8.0