2009-08-07 14:08:09 +00:00
|
|
|
|
<?php
|
|
|
|
|
/**
|
|
|
|
|
* Cache - G<EFBFBD>re le cache des variables
|
|
|
|
|
* @package Cache
|
|
|
|
|
* @author Michael RICOIS
|
|
|
|
|
* @copyright Scores&Decisions
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
Dans une page, on d<EFBFBD>finit des blocs
|
|
|
|
|
Pour chaque bloc enregistrement d'un fichier (nom de la page avec param<EFBFBD>tres)
|
|
|
|
|
Nom du bloc = tableau s<EFBFBD>rialis<EFBFBD> des variables
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
Dans le tableau s<EFBFBD>rialis<EFBFBD>
|
|
|
|
|
Nom de la valeur utile => valeur
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
Suppression des valeurs inutiles
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
define('CACHE_MAXTIME', 2); //HEURES MAXIMUM EN CACHE
|
|
|
|
|
define('CACHE_REFRESH_HOUR', 14); //Heure de rafraichissement des pages
|
|
|
|
|
define('CACHE_EXT','.tpl');
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Retourne le chemin du fichier avec son extension
|
2009-08-11 12:31:26 +00:00
|
|
|
|
* Si en argument une chaine de caract<EFBFBD>re est envoy<EFBFBD> alors on d<EFBFBD>finit que c'est le nom du fichier
|
|
|
|
|
* Sinon le nom du fichier est enregistr<EFBFBD> en m<EFBFBD>moire pour chaque appel
|
2009-08-07 14:08:09 +00:00
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
function cache_filename(){
|
|
|
|
|
static $filename;
|
|
|
|
|
$numargs = func_num_args();
|
|
|
|
|
if($numargs != 0){
|
|
|
|
|
$args = func_get_args();
|
|
|
|
|
$filename = PATH_SITE.'/cache/'.$args[0].CACHE_EXT;
|
|
|
|
|
}
|
|
|
|
|
return $filename;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Enregistre les donn<EFBFBD>es d'un bloc dans le cache
|
|
|
|
|
* @param string $block
|
|
|
|
|
* Le nom du bloc
|
|
|
|
|
* @param array $array
|
|
|
|
|
* Le tableau de donn<EFBFBD>es (cl<EFBFBD> => valeur) <EFBFBD> stocker sous forme s<EFBFBD>rialis<EFBFBD>
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
function cache_add($block, $array){
|
2009-08-11 12:31:26 +00:00
|
|
|
|
global $firephp;
|
2009-08-07 14:08:09 +00:00
|
|
|
|
//Ajout des blocs s<>rialis<69>s
|
|
|
|
|
$file = cache_filename();
|
2009-08-11 12:31:26 +00:00
|
|
|
|
$firephp->log($file, 'CACHE ADD : Fichier');
|
2009-08-07 14:08:09 +00:00
|
|
|
|
if($file != ''){
|
|
|
|
|
$data = $block.' = '.serialize($array);
|
|
|
|
|
if( cache_writefile($file,$data) !== FALSE ) return TRUE;
|
|
|
|
|
else return FALSE;
|
|
|
|
|
}else return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* R<EFBFBD>cup<EFBFBD>re les variables en cache depuis le fichier.
|
|
|
|
|
* @return array ou FALSE
|
|
|
|
|
*/
|
|
|
|
|
function cache_get($block){
|
2009-08-11 12:31:26 +00:00
|
|
|
|
global $firephp;
|
|
|
|
|
$file = cache_filename();
|
|
|
|
|
$firephp->log($file, 'CACHE GET : Fichier ');
|
2009-08-07 14:08:09 +00:00
|
|
|
|
$cache = cache_readfile($file);
|
2009-08-11 12:31:26 +00:00
|
|
|
|
$firephp->log($cache, 'CACHE GET : Content');
|
2009-08-07 14:08:09 +00:00
|
|
|
|
if(isset($cache[$block])){
|
|
|
|
|
return unserialize($cache[$block]);
|
|
|
|
|
}else return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Suppression du cache pour la page en cours.
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
function cache_delete(){
|
|
|
|
|
$file = cache_filename();
|
2009-08-11 12:31:26 +00:00
|
|
|
|
if(file_exists($file)) return unlink($file);
|
|
|
|
|
else return FALSE;
|
2009-08-07 14:08:09 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* V<EFBFBD>rifie que le fichier est disponible dans le cache
|
|
|
|
|
* @param $file
|
|
|
|
|
* Chemin vers le fichier que l'on veut v<EFBFBD>rifier
|
|
|
|
|
* @return boolean
|
|
|
|
|
* Retourne TRUE ou FALSE
|
|
|
|
|
*/
|
2009-08-11 12:31:26 +00:00
|
|
|
|
function cache_exist(){
|
|
|
|
|
$file = cache_filename();
|
|
|
|
|
if( file_exists($file) && !cache_timeover($file) ) return TRUE;
|
2009-08-07 14:08:09 +00:00
|
|
|
|
else return FALSE;
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* V<EFBFBD>rifie si la date de cr<EFBFBD>ation du fichier de cache est toujours valide
|
|
|
|
|
* @param $file
|
|
|
|
|
* Chemin vers le fichier que l'on veut v<EFBFBD>rifier
|
|
|
|
|
* @return boolean
|
|
|
|
|
* Retourne TRUE or FALSE
|
|
|
|
|
*/
|
|
|
|
|
function cache_timeover($file){
|
|
|
|
|
global $firephp;
|
|
|
|
|
$dateFile = filemtime($file);
|
|
|
|
|
$now= mktime(date('G'), date('i'), date('s'), date("m") , date("d"), date("Y"));
|
|
|
|
|
$maxTime = mktime(date('G',$dateFile)+CACHE_MAXTIME, date('i',$dateFile), date('s',$dateFile), date("m",$dateFile), date("d",$dateFile), date("Y",$dateFile));
|
|
|
|
|
$refreshHour = mktime(CACHE_REFRESH_HOUR, 0, 0, date("m"), date("d"), date("Y"));
|
|
|
|
|
//Debug
|
|
|
|
|
$firephp->log(date('G:i:s - d/m/Y',$dateFile), 'CACHE : dateFile ');
|
|
|
|
|
$firephp->log(date('G:i:s - d/m/Y',$now), 'CACHE : now ');
|
|
|
|
|
$firephp->log(date('G:i:s - d/m/Y',$maxTime), 'CACHE : MaxTime');
|
|
|
|
|
$firephp->log(date('G:i:s - d/m/Y',$refreshHour), 'CACHE : RefreshHour ');
|
|
|
|
|
//Fin Debug
|
|
|
|
|
if( ($now>$maxTime) || ($dateFile<$refreshHour && $now>$refreshHour) ) return TRUE;
|
|
|
|
|
else return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Ecrit une ligne dans un fichier
|
|
|
|
|
* @param $file
|
|
|
|
|
* Le chemin du ficher <EFBFBD> <EFBFBD>crire
|
|
|
|
|
* @param $line
|
|
|
|
|
* Une cha<EFBFBD>ne de caract<EFBFBD>re
|
|
|
|
|
* @return boolean ou le nombre d'octet <EFBFBD>crit
|
|
|
|
|
*/
|
|
|
|
|
function cache_writefile($file, $line){
|
|
|
|
|
$fp = fopen($file,'a');
|
2009-08-11 12:31:26 +00:00
|
|
|
|
$result = fwrite($fp,$line.EOL);
|
2009-08-07 14:08:09 +00:00
|
|
|
|
fclose($fp);
|
|
|
|
|
return $result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2009-08-11 12:31:26 +00:00
|
|
|
|
* Lit le fichier de cache ligne par ligne
|
2009-08-07 14:08:09 +00:00
|
|
|
|
* @param $file
|
|
|
|
|
* Chemin du fichier <EFBFBD> lire
|
|
|
|
|
* @return array
|
|
|
|
|
* Retourne un tableau de valeur ou FALSE si le fichier n'a pu <EFBFBD>tre trouv<EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
function cache_readfile($file){
|
2009-08-11 12:31:26 +00:00
|
|
|
|
global $firephp;
|
|
|
|
|
static $cache_loaded = FALSE;
|
2009-08-07 14:08:09 +00:00
|
|
|
|
static $cache = array();
|
|
|
|
|
if (!$cache_loaded) {
|
|
|
|
|
if (is_file($file)) {
|
2009-08-11 12:31:26 +00:00
|
|
|
|
$lines = file($file);
|
|
|
|
|
$firephp->info('Lecture du ficher');
|
|
|
|
|
foreach ($lines as $line_num => $line) {
|
|
|
|
|
list($key, $value) = explode(' = ', $line, 2);
|
|
|
|
|
$cache[$key] = $value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$cache_loaded = TRUE;
|
2009-08-07 14:08:09 +00:00
|
|
|
|
}
|
|
|
|
|
return $cache;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
?>
|