Ma classe cache

Eléphant du PHP | 100 Messages

28 nov. 2006, 19:39

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);
	}
}

Eléphant du PHP | 100 Messages

28 nov. 2006, 19:43

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);
}


Mammouth du PHP | 2937 Messages

30 nov. 2006, 14:26

Salut!
class cache {
/* *** */	
	function setTime(){
		$this->timeNow = date('U');
	}
	
/* *** */
Tu peux écrire plus simplement:
function setTime(){
		$this->timeNow = time();
	}
:wink:

Eléphanteau du PHP | 23 Messages

30 nov. 2006, 15:39

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 ?
>> Newbie-Project <<
Essayez le Newbie-Directory (nouveau)

Eléphant du PHP | 100 Messages

21 déc. 2006, 17:24

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.