Browse Source

Fixed issue where incorrect cached filesize was reported when appending to file.

ADmad 13 years ago
parent
commit
ba56fb7064
2 changed files with 14 additions and 3 deletions
  1. 9 1
      lib/Cake/Test/Case/Utility/FileTest.php
  2. 5 2
      lib/Cake/Utility/File.php

+ 9 - 1
lib/Cake/Test/Case/Utility/FileTest.php

@@ -433,16 +433,24 @@ class FileTest extends CakeTestCase {
 		$TmpFile = new File($tmpFile);
 		$this->assertFalse(file_exists($tmpFile));
 
-		$fragments = array('CakePHP\'s', ' test suite', ' was here ...', '');
+		$fragments = array('CakePHP\'s', ' test suite', ' was here ...');
 		$data = null;
+		$size = 0;
 		foreach ($fragments as $fragment) {
 			$r = $TmpFile->append($fragment);
 			$this->assertTrue($r);
 			$this->assertTrue(file_exists($tmpFile));
 			$data = $data . $fragment;
 			$this->assertEquals($data, file_get_contents($tmpFile));
+			$newSize = $TmpFile->size();
+			$this->assertTrue($newSize > $size);
+			$size = $newSize;
 			$TmpFile->close();
 		}
+
+		$TmpFile->append('');
+		$this->assertEquals($data, file_get_contents($tmpFile));
+		$TmpFile->close();
 	}
 
 /**

+ 5 - 2
lib/Cake/Utility/File.php

@@ -130,7 +130,6 @@ class File {
 		if (!$force && is_resource($this->handle)) {
 			return true;
 		}
-		clearstatcache();
 		if ($this->exists() === false) {
 			if ($this->create() === false) {
 				return false;
@@ -278,7 +277,6 @@ class File {
  * @link http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html#File::delete
  */
 	public function delete() {
-		clearstatcache();
 		if (is_resource($this->handle)) {
 			fclose($this->handle);
 			$this->handle = null;
@@ -410,6 +408,11 @@ class File {
  * @link http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html#File::exists
  */
 	public function exists() {
+		if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
+			clearstatcache(true, $this->path);
+		} else {
+			clearstatcache();
+		}
 		return (file_exists($this->path) && is_file($this->path));
 	}