Browse Source

Moved stat cache clearing into a method for consitent usage.
Fixes issue where incorrect cached filesize was reported when appending to file.
Thanks dogmatic69 for the patch.

dogmatic69 13 years ago
parent
commit
7b0e5d9375
1 changed files with 18 additions and 2 deletions
  1. 18 2
      lib/Cake/Utility/File.php

+ 18 - 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,7 @@ class File {
  * @link http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html#File::exists
  */
 	public function exists() {
+		$this->clearStatCache();
 		return (file_exists($this->path) && is_file($this->path));
 	}
 
@@ -566,4 +565,21 @@ class File {
 		return false;
 	}
 
+/**
+ * Clear PHP's internal stat cache
+ *
+ * For 5.3 onwards its possible to clear cache for just a single file. Passing true
+ * will clear all the stat cache.
+ * 
+ * @param boolean $all Clear all cache or not
+ * @return void
+ */
+	public function clearStatCache($all = false) {
+		if ($all === false && version_compare(PHP_VERSION, '5.3.0') >= 0) {
+			return clearstatcache(true, $this->path);
+		}
+
+		return clearstatcache();
+	}
+
 }