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