diff --git a/src/pocketmine/utils/Utils.php b/src/pocketmine/utils/Utils.php index ef2fb0d34..a2fdf85a0 100644 --- a/src/pocketmine/utils/Utils.php +++ b/src/pocketmine/utils/Utils.php @@ -54,6 +54,8 @@ use function gettype; use function hexdec; use function implode; use function is_array; +use function is_dir; +use function is_file; use function is_object; use function is_readable; use function is_string; @@ -72,6 +74,8 @@ use function preg_match_all; use function preg_replace; use function proc_close; use function proc_open; +use function rmdir; +use function scandir; use function sha1; use function spl_object_hash; use function str_pad; @@ -85,11 +89,13 @@ use function strtolower; use function substr; use function sys_get_temp_dir; use function trim; +use function unlink; use function xdebug_get_function_stack; use const PHP_EOL; use const PHP_INT_MAX; use const PHP_INT_SIZE; use const PHP_MAXPATHLEN; +use const SCANDIR_SORT_NONE; use const STR_PAD_LEFT; use const STR_PAD_RIGHT; @@ -734,4 +740,22 @@ class Utils{ throw new \TypeError("Declaration of callable `" . CallbackType::createFromCallable($subject) . "` must be compatible with `" . $sigType . "`"); } } + + public static function recursiveUnlink(string $dir) : void{ + if(is_dir($dir)){ + $objects = scandir($dir, SCANDIR_SORT_NONE); + foreach($objects as $object){ + if($object !== "." and $object !== ".."){ + if(is_dir($dir . "/" . $object)){ + self::recursiveUnlink($dir . "/" . $object); + }else{ + unlink($dir . "/" . $object); + } + } + } + rmdir($dir); + }elseif(is_file($dir)){ + unlink($dir); + } + } }