Page 1 sur 1

Ma classe cache

Posté : 28 nov. 2006, 19:39
par stevelace
Voici ma classe cache que j'ai faite tout spécialement pour mes sites persos elle peut contenir à peu près n'importe quoi ! Des objets des array des résultat sql etc elle est simple et facile d'utilisation.

Je vous suggère de setter un dossier hors public pour y insérer les fichiers du cache car ce dossier doit être accessible en écriture.
class cache {

	var $timeNow;
	var $cacheLimit = 3600;
	var $cacheFolder = '/home/fungold/sitecache/';
	var $fileId;
	var $fileExt = '.cache';
	var $fileExist = false;
	var $subName;
	
	function setTime(){
		$this->timeNow = date('U');
	}
	
	function setLimit($minutes){
		if(!is_int($minutes)){die('Erreur Cache : setLimit(int).');}
		$this->cacheLimit = $minutes * 60;
	}
	
	function setFolder($folder){
		if(!is_dir($folder)){die('Erreur Cache : le dossier $folder n\'existe pas.');}
		$this->cacheFolder = $folder;
	}
	
	function setSubName($subname){
		$this->subName = $subname;
	}
	
	function setExt($ext){
		$this->fileExt = $ext;
	}
		
	function setId($file){
		$this->fileId = $this->cacheFolder . md5($file . $this->subName) . $this->fileExt;
	}
	
	function check(){
		$this->setTime();
		if(
			file_exists($this->fileId) 
			and filemtime($this->fileId) >= $this->timeNow - $this->cacheLimit
		){
			$this->fileExist = true;
			return true;
		}
	}
	
	function put($contenu){
		$ouvrir = fopen($this->fileId, 'w');
		$ecrire = fwrite($ouvrir, gzdeflate(serialize($contenu)));
		$fermer = fclose($ouvrir);
	}
	
	function get(){
		return unserialize(gzinflate(file_get_contents($this->fileId)));
	}
	
	function delete($id){
		$this->setId($id);
		unlink($this->fileId);
	}
}

Posté : 28 nov. 2006, 19:43
par stevelace
voici un exemple d'utilisation :wink:
$cache = new cache;
$cache->setFolder('votre dossier de cache/');

$cache->setId('langue');
if($cache->check()){
	$lang = $cache->get();
}
else{
	$lang = array();
	$select = mysql_query("
		select 
		variable, 
		val_$curLang as valeur 
		from lang_vars
	");
	
	while($obj = mysql_fetch_object($select)){
		$lang[$obj->variable] = stripslashes($obj->valeur);
	}
	$cache->put($lang);
	mysql_free_result($select);
}


Re: Ma classe cache

Posté : 30 nov. 2006, 14:26
par Victor BRITO
Salut!
class cache {
/* *** */	
	function setTime(){
		$this->timeNow = date('U');
	}
	
/* *** */
Tu peux écrire plus simplement:
function setTime(){
		$this->timeNow = time();
	}
:wink:

Posté : 30 nov. 2006, 15:39
par MS-DOS_1991
Sympa comme classe :)

Je voudrais juste savoir si le fait de compresser les données que tu écris dans le fichier de cache est vraiment utile ??

Quand on ne stocke que deux ou trois tableaux sérializés, la compression/décompression ne prend-elle pas plus de temps qu'elle n'en fait gagner ?

Posté : 21 déc. 2006, 17:24
par stevelace
Sympa comme classe :)

Je voudrais juste savoir si le fait de compresser les données que tu écris dans le fichier de cache est vraiment utile ??

Quand on ne stocke que deux ou trois tableaux sérializés, la compression/décompression ne prend-elle pas plus de temps qu'elle n'en fait gagner ?
Bonne question ! mais je crois que non car depuis que j'utilise ceci sur mes sites, mes pages s'affichent beaucoup plus vite qu'avant.
De plus, mon but était simplement de minimiser l'utilisation du serveur sql avec mes requêtes de 3 kilomètres.