Danygras

Enregistrer de l'information en cache : cache.class.php

<?php
/**
 * classe pour lire / ecrire un fichier array php
 * le fichier doit exister et définir tous les attributs
 * qui sont les attributs de la classe
 * ceci permet de lire / ecrire une configuration facilement
 */
class cache {

	private $contenu; // cache
	private $save;
	private $name;
	private $file;

	/* constructeur */
	function __construct($cache, $save = false) {
		$this->file = SITE_DIR . "cache/$cache.cache.php";
		if($cache == 'global') $this->name = '_cache'; else $this->name = '_'.$cache;
		
		if(!is_file($this->file)) // générer le fichier vide
			file_put_contents($this->file,"<?php\n\${$this->name} = array();\n?>");
			// die("erreur cache=$cache: inconnu");

		include_once($this->file);
		$this->contenu = ${$this->name};

		/* enregistrer ou pas à la fermeture? */
		$this->save = $save;
	}

	function __destruct(){ /* enregistre le fichier ? */
		if($this->save) $this->save();
	}

	/* méthodes set & get */
	function __set($key, $value) {
		$this->contenu[$key] = $value;
	}

	function __get($key) {
		if(isset($this->contenu[$key])) return $this->contenu[$key];
		else { echo "GET classe 'cache({$this->name})'->$key\n"; return false; }
	}

	function get_array(){
		return $this->contenu;
	}

	function force_save($save=true){
		$this->save = $save;
	}

	function save(){ /* enregistre le fichier */
		$fp = fopen($this->file, "w");

		$txt = '<?php $'.$this->name.' = ';
		$txt .=  var_export($this->contenu, true);
		$txt .= '; ?>';

		fwrite($fp, $txt);
		fclose($fp);
	}

}

?>