Comportement aléatoire de la méthode destruct
Posté : 08 mars 2007, 14:49
Bonjour à tous,
je me suis fait un toute petite class de cache aujoud'hui, et y a quelque chose qui cloche...
tout d'abord la classe:
donc j'ai fait ceci comme code:
En effet, avec le code comme il est, si j'appel http://localhost/cachetest.php plusieurs fois, le résultat est toujours le même => normal, si j'appel http://locahost/cachetest.php?clear_cache l'affichage change => toujours normal, et si je reviens à l'url de départ, l'affichage ne change plus, c'est bon... tout fonctionne!
Seulement si j'enlève $cache=null; et que je compte sur php pour appeler la méthode _destruct à la fin de l'éxécution, et bien ça ne marche, car après être passé par clear_cache, l'affichage change tout le temps, car le fichier de cache n'a pas été créé...
Peut-être est-ce du à une mauvaise config de php ?
Je suis tout ouïe...
je me suis fait un toute petite class de cache aujoud'hui, et y a quelque chose qui cloche...
tout d'abord la classe:
<?php
/**
* Classe cache
* Gestion d'un système de cache
*
*
* Exemple d'utilisation :
* <code><?php
* include('cache.class.php');
* $cache = new cache('cachetest');
*
* $cache->initCache();
*
* echo microtime();
*
* $cache=null;
* ?></code>
*
* @author Joris Mulliez
* @package Cache
*/
class cache{
/**
* Dossier où l'on stocke les fichiers de cache
*/
const DOSSIER='./';
/**
* Extension des fichiers
*/
const EXTENSION='.cache.html';
/**
* Nom du fichier traité
*/
private $file=null;
/**
* Constructeur
*
* prend en paramètre le nom du fichier *.php, sans l'extension .php
* @param String $file
* @return void
*/
public function __construct($file){
$this->file=$file;
}
/**
* Fonction initCache
* Si le fichier de cache correspondant ) $this->file existe, on l'inclu, et on arrête tout
* sinon on démarre la temporisation...
*/
public function initCache(){
if(file_exists(self::DOSSIER.$this->file.self::EXTENSION)){
include(self::DOSSIER.$this->file.self::EXTENSION);
exit();
} else {
ob_start();
}
}
/**
* Fonction clearCache
* supprime le fichier de cache
*/
public function clearCache(){
if(file_exists(self::DOSSIER.$this->file.self::EXTENSION))
unlink(self::DOSSIER.$this->file.self::EXTENSION);
}
/**
* Fonction _destruct
* récupère le fruit de la temporisation et le stocke dans le fichier de cache, puis affiche
* le résultat de la page
*/
public function __destruct(){
$content=ob_get_contents();
ob_end_clean();
file_put_contents(self::DOSSIER.$this->file.self::EXTENSION,$content);
echo $content;
}
}
?>elle est toute simple à priori...donc j'ai fait ceci comme code:
<?php
include('cache.class.php');//on inclu la classe
$cache = new cache('cachetest');//instanciation
if(isset($_GET['clear_cache'])){//permet de vider le cache
$cache->clearCache();
}
$cache->initCache();//on démarre la gestion de cache
echo microtime();
echo " bonjour";
$cache=null;// on appel _destruct
?>voilà le prolème, c'est que si j'enlève le $cache=null; la méthode _destruct n'est pas appelée comme il faut...En effet, avec le code comme il est, si j'appel http://localhost/cachetest.php plusieurs fois, le résultat est toujours le même => normal, si j'appel http://locahost/cachetest.php?clear_cache l'affichage change => toujours normal, et si je reviens à l'url de départ, l'affichage ne change plus, c'est bon... tout fonctionne!
Seulement si j'enlève $cache=null; et que je compte sur php pour appeler la méthode _destruct à la fin de l'éxécution, et bien ça ne marche, car après être passé par clear_cache, l'affichage change tout le temps, car le fichier de cache n'a pas été créé...
Peut-être est-ce du à une mauvaise config de php ?
Je suis tout ouïe...