Você pode usar o sistema de arquivos do Symfony ( código ):
// composer require symfony/filesystem
use Symfony\Component\Filesystem\Filesystem;
(new Filesystem)->remove($dir);
No entanto, não consegui excluir algumas estruturas de diretório complexas com esse método; portanto, primeiro você deve experimentá-lo para garantir que esteja funcionando corretamente.
Eu poderia excluir a estrutura de diretórios mencionada usando uma implementação específica do Windows:
$dir = strtr($dir, '/', '\\');
// quotes are important, otherwise one could
// delete "foo" instead of "foo bar"
system('RMDIR /S /Q "'.$dir.'"');
E apenas por uma questão de integridade, aqui está um antigo código meu:
function xrmdir($dir) {
$items = scandir($dir);
foreach ($items as $item) {
if ($item === '.' || $item === '..') {
continue;
}
$path = $dir.'/'.$item;
if (is_dir($path)) {
xrmdir($path);
} else {
unlink($path);
}
}
rmdir($dir);
}