Bonsoir,
je me permets de faire remonter un peu ce sujet, en vous montrant l'évolution de ma classe, et pour vous poser une pitite question.
Voici ma classe telle qu'elle est:
<?php
/*
cache.class.php
classe de cache
(c)2006 geekimo
Geekimo : [email protected]
*/
class cache
{
private $cache_file_status;//status du fichier cache(true = fichier cache nickel, false = fichier cache a regenerer)
private $cache_content;//contenu du cache si retour vers utilisateur ou remplissage du fichier cache
private $cache_error;//variable d' erreurs
private $cache_file;//variable du nom du fichier cache
private $limite;//variable de limitation de durée du cache
public function verif()
{
$replace = array('=', '?', '&');//caractéres a supprimer dans le nom du fichier cache
$id_string = md5(serialize(session_id()).serialize($_SESSION['user_id']));//composition de l'id du fichier cache
$url = $_SERVER['PHP_SELF'].'_'.$_SERVER['QUERY_STRING'].'_'.$id_string;//compositin du nom du fichier cache
$this->cache_file = 'cache/'.str_replace($replace, '_', $url).'.cache';//url du fichier cache
$this->limite = '120';//durée du cache en secondes
if(file_exists($this->cache_file))
{
if(filemtime($this->cache_file) + $this->limite < time())//test si peremtion du fichier est inférieure a date actuelle, si oui, cache invalide
{
$this->cache_file_status = false;// le fichier cache n'est pas bon
}
elseif(filemtime($this->cache_file) + $this->limite > time())//test si peremtion du fichier est supérieure a date actuelle, si oui, cache valide
{
$this->cache_file_status = true;// le fichier cache est ok
}
}
elseif(!file_exists($this->cache_file))
{
$this->cache_file_status = false;// le fichier cache n'est pas bon
}
return $this->cache_file_status;
}
public function get($echo)
{
if(!empty($this->cache_file_status))
{
if($this->cache_file_status)
{
$this->cache_content = file_get_contents($this->cache_file);
}
elseif(!$this->cache_file_status)
{
throw new Exception('le fichier cache est périmé, la fonction $this->get() ne peut donc pas être utilisée!<br />');
}
if($echo)
{
echo $this->cache_content;
}
else
{
return $this->cache_content;
}
}
elseif(empty($this->cache_file_status))
{
throw new Exception('Le fichier cache n\'a pas été testé avant d\'utiliser $this->get(), vous devez utiliser $this->verif<br />');
}
}
public function store($template)
{
if(is_bool($this->cache_file_status))
{
if($this->cache_file_status)
{
throw new Exception('Le fichier cache n\'est pas périmé, la fonction $this->store() ne peut donc pas être utilisée! <br />');
}
elseif(!$this->cache_file_status)
{
if(file_exists($this->cache_file))
{
unlink($this->cache_file);
}
$cache = fopen($this->cache_file, 'w+');
fputs($cache, gzcompress($template));
$cache_store = fclose($cache);
if($cache_store)
{
return true;
}
else
{
return false;
}
}
}
elseif(!is_bool($this->cache_file_status))
{
throw new Exception('Le fichier cache n\'a pas été testé avant d\'utiliser $this->store(), vous devez utiliser $this->verif<br />');
}
}
public function clear()
{
$this->limite_cache = 3;
$index_cache = get_file('cache/', '*.cache');
$limit = count($index_cache);
for($i = 0;$i != $limit; $i++)
{
if(filemtime($index_cache['name']) + $this->limite < time())
{
unlink($index_cache['name']);
}
}
}
}
?>
Actuellement, elle est en version pré-finale et je me pose une petite question car j'ai fait quelques tests et j'ai quelques problèmes au niveau de l'id de session...
Celui-ci change t'il constamment a chaque nouvelle page?
Car après avoir fait un joli F5 sur ma page en de test dans un temps inférieur au timeout prévu ($this->limite), je me suis retrouvé avec un second fichier cache...
Je vous remercie donc d'avance pour l'aide que vous pourriez m'apporter.
@+

Bonsoir,
je me permets de faire remonter un peu ce sujet, en vous montrant l'évolution de ma classe, et pour vous poser une pitite question.
Voici ma classe telle qu'elle est:
[php]
<?php
/*
cache.class.php
classe de cache
(c)2006 geekimo
Geekimo :
[email protected]*/
class cache
{
private $cache_file_status;//status du fichier cache(true = fichier cache nickel, false = fichier cache a regenerer)
private $cache_content;//contenu du cache si retour vers utilisateur ou remplissage du fichier cache
private $cache_error;//variable d' erreurs
private $cache_file;//variable du nom du fichier cache
private $limite;//variable de limitation de durée du cache
public function verif()
{
$replace = array('=', '?', '&');//caractéres a supprimer dans le nom du fichier cache
$id_string = md5(serialize(session_id()).serialize($_SESSION['user_id']));//composition de l'id du fichier cache
$url = $_SERVER['PHP_SELF'].'_'.$_SERVER['QUERY_STRING'].'_'.$id_string;//compositin du nom du fichier cache
$this->cache_file = 'cache/'.str_replace($replace, '_', $url).'.cache';//url du fichier cache
$this->limite = '120';//durée du cache en secondes
if(file_exists($this->cache_file))
{
if(filemtime($this->cache_file) + $this->limite < time())//test si peremtion du fichier est inférieure a date actuelle, si oui, cache invalide
{
$this->cache_file_status = false;// le fichier cache n'est pas bon
}
elseif(filemtime($this->cache_file) + $this->limite > time())//test si peremtion du fichier est supérieure a date actuelle, si oui, cache valide
{
$this->cache_file_status = true;// le fichier cache est ok
}
}
elseif(!file_exists($this->cache_file))
{
$this->cache_file_status = false;// le fichier cache n'est pas bon
}
return $this->cache_file_status;
}
public function get($echo)
{
if(!empty($this->cache_file_status))
{
if($this->cache_file_status)
{
$this->cache_content = file_get_contents($this->cache_file);
}
elseif(!$this->cache_file_status)
{
throw new Exception('le fichier cache est périmé, la fonction $this->get() ne peut donc pas être utilisée!<br />');
}
if($echo)
{
echo $this->cache_content;
}
else
{
return $this->cache_content;
}
}
elseif(empty($this->cache_file_status))
{
throw new Exception('Le fichier cache n\'a pas été testé avant d\'utiliser $this->get(), vous devez utiliser $this->verif<br />');
}
}
public function store($template)
{
if(is_bool($this->cache_file_status))
{
if($this->cache_file_status)
{
throw new Exception('Le fichier cache n\'est pas périmé, la fonction $this->store() ne peut donc pas être utilisée! <br />');
}
elseif(!$this->cache_file_status)
{
if(file_exists($this->cache_file))
{
unlink($this->cache_file);
}
$cache = fopen($this->cache_file, 'w+');
fputs($cache, gzcompress($template));
$cache_store = fclose($cache);
if($cache_store)
{
return true;
}
else
{
return false;
}
}
}
elseif(!is_bool($this->cache_file_status))
{
throw new Exception('Le fichier cache n\'a pas été testé avant d\'utiliser $this->store(), vous devez utiliser $this->verif<br />');
}
}
public function clear()
{
$this->limite_cache = 3;
$index_cache = get_file('cache/', '*.cache');
$limit = count($index_cache);
for($i = 0;$i != $limit; $i++)
{
if(filemtime($index_cache['name']) + $this->limite < time())
{
unlink($index_cache['name']);
}
}
}
}
?>
[/php]
Actuellement, elle est en version pré-finale et je me pose une petite question car j'ai fait quelques tests et j'ai quelques problèmes au niveau de l'id de session...
Celui-ci change t'il constamment a chaque nouvelle page?
Car après avoir fait un joli F5 sur ma page en de test dans un temps inférieur au timeout prévu ($this->limite), je me suis retrouvé avec un second fichier cache...
Je vous remercie donc d'avance pour l'aide que vous pourriez m'apporter.
@+ ;)