diff --git a/lib/Cake/Utility/File.php b/lib/Cake/Utility/File.php index 78635d39b..3c1fd79b3 100644 --- a/lib/Cake/Utility/File.php +++ b/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(); + } + }