Rev 580 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpclass Cache {private $actif = null;private $dossier_stockage = null;private $duree_de_vie = null;public function __construct($dossier_stockage = null, $duree_de_vie = null, $activation = true) {$this->actif = ($activation) ? true : false;if ($this->actif) {$this->dossier_stockage = $dossier_stockage;if (is_null($dossier_stockage)) {$this->dossier_stockage = self::getDossierTmp();}$this->duree_de_vie = $duree_de_vie;if (is_null($duree_de_vie)) {$this->duree_de_vie = 3600*24;}}}public function charger($id) {$contenu = false;if ($this->actif) {$chemin_fichier_cache = $this->dossier_stockage.DIRECTORY_SEPARATOR.$id.'.txt';if (file_exists($chemin_fichier_cache ) && (time() - @filemtime($chemin_fichier_cache) < $this->duree_de_vie)) {$contenu = file_get_contents($chemin_fichier_cache);}}return $contenu;}public function sauver($id, $contenu) {if ($this->actif) {$chemin_fichier_cache = $this->dossier_stockage.DIRECTORY_SEPARATOR.$id.'.txt';if (!file_exists($chemin_fichier_cache) || (time() - @filemtime($chemin_fichier_cache) > $this->duree_de_vie)) {$fh = fopen($chemin_fichier_cache,'w+');if ($fh) {fputs($fh, $contenu);fclose($fh);}}}}/*** Détermine le dossier système temporaire et détecte si nous y avons accès en lecture et écriture.** Inspiré de Zend_File_Transfer_Adapter_Abstract & Zend_Cache** @return string|false le chemine vers le dossier temporaire ou false en cas d'échec.*/private static function getDossierTmp() {$dossier_tmp = false;foreach (array($_ENV, $_SERVER) as $environnement) {foreach (array('TMPDIR', 'TEMP', 'TMP', 'windir', 'SystemRoot') as $cle) {if (isset($environnement[$cle])) {if (($cle == 'windir') or ($cle == 'SystemRoot')) {$dossier = realpath($environnement[$cle] . '\\temp');} else {$dossier = realpath($environnement[$cle]);}if (self::etreAccessibleEnLectureEtEcriture($dossier)) {$dossier_tmp = $dossier;break 2;}}}}if ( ! $dossier_tmp) {$dossier_televersement_tmp = ini_get('upload_tmp_dir');if ($dossier_televersement_tmp) {$dossier = realpath($dossier_televersement_tmp);if (self::etreAccessibleEnLectureEtEcriture($dossier)) {$dossier_tmp = $dossier;}}}if ( ! $dossier_tmp) {if (function_exists('sys_get_temp_dir')) {$dossier = sys_get_temp_dir();if (self::etreAccessibleEnLectureEtEcriture($dossier)) {$dossier_tmp = $dossier;}}}if ( ! $dossier_tmp) {// Tentative de création d'un fichier temporaire$fichier_tmp = tempnam(md5(uniqid(rand(), TRUE)), '');if ($fichier_tmp) {$dossier = realpath(dirname($fichier_tmp));unlink($fichier_tmp);if (self::etreAccessibleEnLectureEtEcriture($dossier)) {$dossier_tmp = $dossier;}}}if ( ! $dossier_tmp && self::etreAccessibleEnLectureEtEcriture('/tmp')) {$dossier_tmp = '/tmp';}if ( ! $dossier_tmp && self::etreAccessibleEnLectureEtEcriture('\\temp')) {$dossier_tmp = '\\temp';}return $dossier_tmp;}/*** Vérifie si le fichier ou dossier est accessible en lecture et écriture.** @param $ressource chemin vers le dossier ou fichier à tester* @return boolean true si la ressource est accessible en lecture et écriture.*/protected static function etreAccessibleEnLectureEtEcriture($ressource){$accessible = false;if (is_readable($ressource) && is_writable($ressource)) {$accessible = true;}return $accessible;}}?>