Borrar directorio recursivamente

PHP aporta algunos iteradores interesantes para acceder al sistema de archivos. Anteriormente era algo tedioso tener que buscar archivos, eliminar directorios, etc., pero con estos iteradores se ha vuelto un poco más fácil la manipulación.

Aprovechando estos iteradores, a continuación pongo una función que permite eliminar de manera recursiva un directorio y que uso normalmente en mis clases por medio de un trait.

  1.     /**
  2.      * Elimina un directorio de manera recursiva.
  3.      *
  4.      * @param $dir string Directorio a eliminar.
  5.      *
  6.      * @return bool TRUE si se pudo eliminar el directorio.
  7.      */
  8.     public static function rmdir($dir)
  9.     {
  10.         if (is_dir($dir))
  11.         {
  12.             $_ok = TRUE;
  13.             $_iterator = new \RecursiveIteratorIterator(
  14.                 new \RecursiveDirectoryIterator(
  15.                     $dir,
  16.                     \FilesystemIterator::SKIP_DOTS
  17.                 ),
  18.                 \RecursiveIteratorIterator::CHILD_FIRST
  19.             );
  20.             foreach ($_iterator as $_path)
  21.             {
  22.                 $_ok = $_path->isFile()
  23.                     ? unlink($_path->getPathname())
  24.                     : self::rmdir($_path->getPathname());
  25.                 if (!$_ok)
  26.                 {
  27.                     break;
  28.                 }
  29.             }
  30.             if ($_ok)
  31.             {
  32.                 $_ok = rmdir($dir);
  33.             }
  34.         }
  35.         else
  36.         {
  37.             $_ok = FALSE;
  38.         }
  39.  
  40.         return $_ok;
  41.     }