Browse Source

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

tags/2.0.0-beta
Klimov Paul 12 years ago
parent
commit
ef60ec56a3
  1. 22
      framework/yii/helpers/base/FileHelper.php
  2. 29
      tests/unit/framework/helpers/FileHelperTest.php

22
framework/yii/helpers/base/FileHelper.php

@ -169,4 +169,26 @@ class FileHelper
}
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);
}
}
}

29
tests/unit/framework/helpers/FileHelperTest.php

@ -9,6 +9,9 @@ use yii\test\TestCase;
*/
class FileHelperTest extends TestCase
{
/**
* @var string test files path.
*/
private $testFilePath = '';
public function setUp()
@ -46,7 +49,8 @@ class FileHelperTest extends TestCase
// Tests :
public function testCopyDirectory() {
public function testCopyDirectory()
{
$basePath = $this->testFilePath;
$srcDirName = $basePath . DIRECTORY_SEPARATOR . 'test_src_dir';
mkdir($srcDirName, 0777, true);
@ -68,4 +72,27 @@ class FileHelperTest extends TestCase
$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!');
}
}
Loading…
Cancel
Save