protected function _dirDelete($dir, $recursive)
{
foreach (scandir($dir, SCANDIR_SORT_NONE) as $item) {
if ($item === '.' || $item === '..') {
continue;
}
$path = $dir . '/' . $item;
if (is_file($path)) {
if (!unlink($path)) {
throw new FileException('delete `:dir` file failed: :last_error_message', ['dir' => $dir]);
}
} elseif (is_dir($path)) {
if ($recursive) {
$this->_dirDelete($path, $recursive);
}
if (!rmdir($path)) {
throw new FileException('delete `:dir` directory failed: :last_error_message', ['dir' => $dir]);
}
} else {
break;
}
}
}