--- Zend/Cache/Backend/File.php 2008-03-21 18:05:19.000000000 +0000 +++ Zend/Cache/Backend/File.php 2008-06-26 00:34:52.000000000 +0000 @@ -310,7 +310,7 @@ if (!$metadatas) { return false; } - $this->_setMetadatas($id, $metadatas); + $this->_setMetadatas($id, $metadatas, false); return $metadatas; } } @@ -318,19 +318,22 @@ /** * Set a metadatas record * - * @param string $id Cache id - * @param array $metadatas Associative array of metadatas + * @param string $id Cache id + * @param array $metadatas Associative array of metadatas + * @param boolean $save optional pass false to disable saving to file * @return boolean True if no problem */ - private function _setMetadatas($id, $metadatas) + private function _setMetadatas($id, $metadatas, $save = true) { if (count($this->_metadatasArray) >= $this->_options['metadatas_array_max_size']) { $n = (int) ($this->_options['metadatas_array_max_size'] / 10); $this->_metadatasArray = array_slice($this->_metadatasArray, $n); } - $result = $this->_saveMetadatas($id, $metadatas); - if (!$result) { - return false; + if ($save) { + $result = $this->_saveMetadatas($id, $metadatas); + if (!$result) { + return false; + } } $this->_metadatasArray[$id] = $metadatas; return true; @@ -661,13 +664,7 @@ $f = @fopen($file, 'rb'); if ($f) { if ($this->_options['file_locking']) @flock($f, LOCK_SH); - $fsize = @filesize($file); - if ($fsize == 0) { - $result = ''; - } else { - $result = fread($f, $fsize); - } - if ($this->_options['file_locking']) @flock($f, LOCK_UN); + $result = stream_get_contents($f); @fclose($f); } set_magic_quotes_runtime($mqr); @@ -684,14 +681,15 @@ private function _filePutContents($file, $string) { $result = false; - $f = @fopen($file, 'wb'); + $f = @fopen($file, 'ab+'); if ($f) { if ($this->_options['file_locking']) @flock($f, LOCK_EX); + fseek($f, 0); + ftruncate($f, 0); $tmp = @fwrite($f, $string); if (!($tmp === FALSE)) { $result = true; } - if ($this->_options['file_locking']) @flock($f, LOCK_UN); @fclose($f); } @chmod($file, $this->_options['cache_file_umask']);