*/ /** * La classe Model_array représente le modèle interragissant avec les fichiers de type texte gérant des tableaux php */ class Minz_ModelArray { /** * $array Le tableau php contenu dans le fichier $filename */ protected $array = array (); /** * $filename est le nom du fichier */ protected $filename; /** * Ouvre le fichier indiqué, charge le tableau dans $array et le $filename * @param $filename le nom du fichier à ouvrir contenant un tableau * Remarque : $array sera obligatoirement un tableau */ public function __construct ($filename) { $this->filename = $filename; if (!file_exists($this->filename)) { throw new Minz_FileNotExistException($this->filename, Minz_Exception::WARNING); } elseif (($handle = $this->getLock()) === false) { throw new Minz_PermissionDeniedException($this->filename); } else { $this->array = include($this->filename); $this->releaseLock($handle); if ($this->array === false) { throw new Minz_PermissionDeniedException($this->filename); } elseif (is_array($this->array)) { $this->array = $this->decodeArray($this->array); } else { $this->array = array (); } } } /** * Sauve le tableau $array dans le fichier $filename **/ protected function writeFile() { if (!file_put_contents($this->filename, "array, true) . ';', LOCK_EX)) { throw new Minz_PermissionDeniedException($this->filename); } return true; } //TODO: check if still useful, and if yes, use a native function such as array_map private function decodeArray ($array) { $new_array = array (); foreach ($array as $key => $value) { if (is_array ($value)) { $new_array[$key] = $this->decodeArray ($value); } else { $new_array[$key] = stripslashes ($value); } } return $new_array; } private function getLock() { $handle = fopen($this->filename, 'r'); if ($handle === false) { return false; } $count = 50; while (!flock($handle, LOCK_SH) && $count > 0) { $count--; usleep(1000); } if ($count > 0) { return $handle; } else { fclose($handle); return false; } } private function releaseLock($handle) { flock($handle, LOCK_UN); fclose($handle); } }