Permalink
Browse files

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.
  • Loading branch information...
1 parent 5c83bc1 commit 7b0e5d9375eef2cfd27335a2e62dda0b444a18b2 @dogmatic69 dogmatic69 committed with ADmad Feb 12, 2013
Showing with 18 additions and 2 deletions.
  1. +18 −2 lib/Cake/Utility/File.php
View
@@ -130,7 +130,6 @@ public function open($mode = 'r', $force = false) {
if (!$force && is_resource($this->handle)) {
return true;
}
- clearstatcache();
if ($this->exists() === false) {
if ($this->create() === false) {
return false;
@@ -278,7 +277,6 @@ public function close() {
* @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 @@ public function pwd() {
* @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 @@ public function mime() {
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();
+ }
+
}

0 comments on commit 7b0e5d9

Please sign in to comment.