extranet/includes/cache/cache.php

181 lines
4.5 KiB
PHP

<?php
/**
* Cache - Gère le cache des variables
* @package Cache
* @author Michael RICOIS
* @copyright Scores&Decisions
*/
/*
Dans une page, on définit des blocs
Pour chaque bloc enregistrement d'un fichier (nom de la page avec paramètres)
Nom du bloc = tableau sérialisé des variables
...
Dans le tableau sérialisé
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
* Si en argument une chaine de caractère est envoyé alors on définit que c'est le nom du fichier
* Sinon le nom du fichier est enregistré en mémoire pour chaque appel
* @return string
*/
function cache_filename()
{
static $filename;
$numargs = func_num_args();
if($numargs != 0){
//unset($filename);
//static $filename;
$args = func_get_args();
$filename = PATH_SITE.'/cache/pages/'.$args[0].CACHE_EXT;
}
return $filename;
}
/**
* Enregistre les données d'un bloc dans le cache
* @param string $block
* Le nom du bloc
* @param array $array
* Le tableau de données (clé => valeur) à stocker sous forme sérialisé
* @return boolean
*/
function cache_add($block, $array){
//Traitement
$array = cache_htmlencode($array);
//Ajout des blocs sérialisés
$file = cache_filename();
if($file != ''){
$data = $block.' = '.serialize($array);
if( cache_writefile($file,$data) !== FALSE ) return TRUE;
else return FALSE;
}else return FALSE;
}
/**
* Récupére les variables en cache depuis le fichier.
* @return array ou FALSE
*/
function cache_get($block){
global $firephp;
$file = cache_filename();
$cache = cache_readfile($file);
if(isset($cache[$block])){
//Traitement
$block = unserialize($cache[$block]);
$block = cache_htmldecode($block);
return $block;
}else return FALSE;
}
/**
* Suppression du cache pour la page en cours.
* @return boolean
*/
function cache_delete(){
$file = cache_filename();
if(file_exists($file)) return unlink($file);
else return FALSE;
}
/**
* Vérifie que le fichier est disponible dans le cache
* @param $file
* Chemin vers le fichier que l'on veut vérifier
* @return boolean
* Retourne TRUE ou FALSE
*/
function cache_exist(){
$file = cache_filename();
if( file_exists($file) && !cache_timeover($file) ) return TRUE;
else return FALSE;
}
/**
* Vérifie si la date de création du fichier de cache est toujours valide
* @param $file
* Chemin vers le fichier que l'on veut vérifier
* @return boolean
* Retourne TRUE or FALSE
*/
function cache_timeover($file){
$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"));
if( ($now>$maxTime) || ($dateFile<$refreshHour && $now>$refreshHour) ) return TRUE;
else return FALSE;
}
/**
* Ecrit une ligne dans un fichier
* @param $file
* Le chemin du ficher à écrire
* @param $line
* Une chaîne de caractère
* @return boolean ou le nombre d'octet écrit
*/
function cache_writefile($file, $line){
$fp = fopen($file,'a');
$result = fwrite($fp,$line."\n");
fclose($fp);
return $result;
}
/**
* Lit le fichier de cache ligne par ligne
* @param $file
* Chemin du fichier à lire
* @return array
* Retourne un tableau de valeur ou FALSE si le fichier n'a pu être trouvé
*/
function cache_readfile($file){
global $firephp;
static $cache_loaded = FALSE;
static $file_loaded;
static $cache = array();
if ( ($file!=$file_loaded) ) {
$file_loaded = $file;
if (is_file($file)) {
$lines = file($file);
foreach ($lines as $line_num => $line) {
list($key, $value) = explode(' = ', $line, 2);
$cache[$key] = $value;
}
}
$cache_loaded = TRUE;
}
return $cache;
}
function cache_graph($filename){
if( hasModeEdition() ){
return false;
} elseif ( file_exists($filename) && !cache_timeover($filename) ) {
return true;
} else {
return false;
}
}
function cache_htmldecode($value){
$value = is_array($value) ? array_map('cache_htmldecode', $value) : base64_decode($value);
return $value;
}
function cache_htmlencode($value){
$value = is_array($value) ? array_map('cache_htmlencode', $value) : base64_encode($value);
return $value;
}
?>