Commit ef60ec56 by Klimov Paul

Method "yii\helpers\base\FileHelper::removeDirectory()" has been added.

parent e2f7b99f
...@@ -169,4 +169,26 @@ class FileHelper ...@@ -169,4 +169,26 @@ class FileHelper
} }
closedir($handle); closedir($handle);
} }
/**
* Removes a directory recursively.
* @param string $directory to be deleted recursively.
*/
public static function removeDirectory($directory)
{
$items = glob($directory . DIRECTORY_SEPARATOR . '{,.}*', GLOB_MARK | GLOB_BRACE);
foreach ($items as $item) {
if (basename($item) == '.' || basename($item) == '..') {
continue;
}
if (substr($item, -1) == DIRECTORY_SEPARATOR) {
self::removeDirectory($item);
} else {
unlink($item);
}
}
if (is_dir($directory)) {
rmdir($directory);
}
}
} }
...@@ -9,6 +9,9 @@ use yii\test\TestCase; ...@@ -9,6 +9,9 @@ use yii\test\TestCase;
*/ */
class FileHelperTest extends TestCase class FileHelperTest extends TestCase
{ {
/**
* @var string test files path.
*/
private $testFilePath = ''; private $testFilePath = '';
public function setUp() public function setUp()
...@@ -46,7 +49,8 @@ class FileHelperTest extends TestCase ...@@ -46,7 +49,8 @@ class FileHelperTest extends TestCase
// Tests : // Tests :
public function testCopyDirectory() { public function testCopyDirectory()
{
$basePath = $this->testFilePath; $basePath = $this->testFilePath;
$srcDirName = $basePath . DIRECTORY_SEPARATOR . 'test_src_dir'; $srcDirName = $basePath . DIRECTORY_SEPARATOR . 'test_src_dir';
mkdir($srcDirName, 0777, true); mkdir($srcDirName, 0777, true);
...@@ -68,4 +72,27 @@ class FileHelperTest extends TestCase ...@@ -68,4 +72,27 @@ class FileHelperTest extends TestCase
$this->assertEquals($content, file_get_contents($fileName), 'Incorrect file content!'); $this->assertEquals($content, file_get_contents($fileName), 'Incorrect file content!');
} }
} }
public function testRemoveDirectory()
{
$basePath = $this->testFilePath;
$dirName = $basePath . DIRECTORY_SEPARATOR . 'test_dir_for_remove';
mkdir($dirName, 0777, true);
$files = array(
'file1.txt' => 'file 1 content',
'file2.txt' => 'file 2 content',
);
foreach ($files as $name => $content) {
file_put_contents($dirName . DIRECTORY_SEPARATOR . $name, $content);
}
$subDirName = $dirName . DIRECTORY_SEPARATOR . 'test_sub_dir';
mkdir($subDirName, 0777, true);
foreach ($files as $name => $content) {
file_put_contents($subDirName . DIRECTORY_SEPARATOR . $name, $content);
}
FileHelper::removeDirectory($dirName);
$this->assertFalse(file_exists($dirName), 'Unable to remove directory!');
}
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment