Fonction exit() et classe...
Posté : 09 oct. 2007, 14:28
Bonjour à tous,
je suis en train de créer une petite classe de cache, et j'ai un petit problème,
dans ma méthode initCache, si le fichier de cache existe déjà, je l'inclus et j'arrête le script (fonction exit()) seulement la fonction exit() n'a pas l'air de fonctionner comme il faut, car ma méthode __desctruct() est appelée malgré tout...
Y a t'il une quelconque configuration à mettre en place? ou faut t'il que je rajoute une variable "flag" pour dire si oui ou non on exécute la fonction destruct...
voici la classe (pas finie):
je suis en train de créer une petite classe de cache, et j'ai un petit problème,
dans ma méthode initCache, si le fichier de cache existe déjà, je l'inclus et j'arrête le script (fonction exit()) seulement la fonction exit() n'a pas l'air de fonctionner comme il faut, car ma méthode __desctruct() est appelée malgré tout...
Y a t'il une quelconque configuration à mettre en place? ou faut t'il que je rajoute une variable "flag" pour dire si oui ou non on exécute la fonction destruct...
voici la classe (pas finie):
<?php
/**
* Classe cache
* classe de gestion de cache
*
* Exemple d'utilisation :
* <code>
* <?php
* include('path/cache.class.php');
* $cache= new cache($_SERVER['PHP_SELF']);
*
* //script de la page
*
* $cache=null;
* ?>
* </code>
*
* @author Joris Mulliez
* @package Cache
*/
class cache {
/**
* Dossier où l'on stocke les fichiers de cache
*/
const DOSSIER='./cache/';
/**
* Extension des fichiers
*/
const EXTENSION='.cache.html';
/**
* Indique si on doit créer le dossier de cache ou non
*/
const CREATE_DIR=false;
private
private $file=null;
public function __construct($file=''){
if(empty($file)){
$this->file=$this->clearUri($_SERVER['REQUEST_URI']);
} else {
$this->file=$this->clearUri($file);
}
if(!is_dir(self::DOSSIER)){
if(self::CREATE_DIR){
//création du dossier
} else {
throw new Exception('Le dossier '.self::DOSSIER.' n\'existe pas.');
}
}
}
/**
* Fonction clearUri
* Simplifi la valeur de REQUEST_URI pour que accueil-bonjour.html?var=3 devienne accueil-bonjourhtmlvar3
*/
private function clearUri($uri){
return preg_replace('#[^a-zA-Z0-9_-]#','',$uri);
}
/**
* 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_flush();
file_put_contents(self::DOSSIER.$this->file.self::EXTENSION,$content.'<!-- fichier de cache générer le '.date("d/m/Y \à H:i:s").' -->');
}
}
?>
Voilà et c'est appelé comme ça:<?php
try{
$cache=new cache();
} catch (Exeption $e){
echo $e->getMessage();
}
$cache->initCache();
//code normal
$cache=null;
?>
merci d'avance