diff --git a/lib/Cake/Cache/Engine/FileEngine.php b/lib/Cake/Cache/Engine/FileEngine.php index d32f65191..27b4dba1e 100644 --- a/lib/Cake/Cache/Engine/FileEngine.php +++ b/lib/Cake/Cache/Engine/FileEngine.php @@ -223,11 +223,28 @@ class FileEngine extends CacheEngine { if (!$this->_init) { return false; } - $dir = dir($this->settings['path']); + $threshold = $now = false; if ($check) { $now = time(); $threshold = $now - $this->settings['duration']; } + $this->_clearDirectory($this->settings['path'], $now, $threshold); + foreach ($this->settings['groups'] as $group) { + $this->_clearDirectory($this->settings['path'] . $group . DS, $now, $threshold); + } + return true; + } + +/** + * Used to clear a directory of matching files. + * + * @param string $path The path to search. + * @param integer $now The current timestamp + * @param integer $threshold Any file not modified after this value will be deleted. + * @return void + */ + protected function _clearDirectory($path, $now, $threshold) { + $dir = dir($path); $prefixLength = strlen($this->settings['prefix']); while (($entry = $dir->read()) !== false) { if (substr($entry, 0, $prefixLength) !== $this->settings['prefix']) { @@ -236,7 +253,7 @@ class FileEngine extends CacheEngine { if ($this->_setKey($entry) === false) { continue; } - if ($check) { + if ($threshold) { $mtime = $this->_File->getMTime(); if ($mtime > $threshold) { @@ -256,7 +273,6 @@ class FileEngine extends CacheEngine { } } $dir->close(); - return true; } /** diff --git a/lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php b/lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php index ffe584d91..d82b9d607 100644 --- a/lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php +++ b/lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php @@ -267,9 +267,10 @@ class FileEngineTest extends CakeTestCase { 'duration' => DAY, 'groups' => array('short') )); - $engine->write('test_key', 'it works', DAY); + $key = 'cake_test_test_key'; + $engine->write($key, 'it works', DAY); $engine->clear(false); - $this->assertFalse($engine->read('test_key'), 'Key should have been removed'); + $this->assertFalse($engine->read($key), 'Key should have been removed'); } /**