Ver Mensaje Individual
  #7 (permalink)  
Antiguo 16/03/2011, 17:46
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: borrar directorio y subdirectorios con archivos dentroto

Bueno ya que estamos te dejo una version OOP con iterators,

para eliminar
Código PHP:
Ver original
  1. class DeleteRecursiveDirectory
  2. {
  3.     /**
  4.      * @var string
  5.      */
  6.     protected $_path;
  7.  
  8.     /**
  9.      * @var RecursiveIteratorIterator
  10.      */
  11.     protected $_iterator;
  12.  
  13.     /**
  14.      * DeleteRecursiveDirectory constructor
  15.      * @param string $path
  16.      * @throws RuntimeException
  17.      */
  18.     public function __construct($path)
  19.     {
  20.         $this->_path = realpath($path);
  21.         $this->_iterator = new RecursiveIteratorIterator(
  22.             new RecursiveDirectoryIterator($this->_path, RecursiveDirectoryIterator::SKIP_DOTS),
  23.             RecursiveIteratorIterator::CHILD_FIRST);
  24.     }
  25.  
  26.     public function delete()
  27.     {
  28.         foreach($this->_iterator as $item){
  29.             $path = $item->getPathname();
  30.             $item->isDir() ? rmdir($path) : unlink($path);
  31.         }
  32.         rmdir($this->_path);
  33.     }
  34.  
  35. }

modo de empleo:

Código PHP:
Ver original
  1. try {
  2.     $toDel = new DeleteRecursiveDirectory('/path/to/directory');
  3.     $toDel->delete();
  4. } catch(RuntimeException $e) {
  5.     echo $e->getMessage() . PHP_EOL;
  6. }

para listar:

Código PHP:
Ver original
  1. class DirectoryTreeIterator extends RecursiveIteratorIterator
  2. {
  3.     /**
  4.      * DirectoryTreeIterator constructor
  5.      * @param string $path
  6.      * @throws UnexpectedValueException
  7.      * @throws RuntimeException
  8.      */
  9.     public function __construct($path)
  10.     {
  11.         parent::__construct(
  12.              new RecursiveCachingIterator(
  13.                  new RecursiveDirectoryIterator(realpath($path), RecursiveDirectoryIterator::KEY_AS_FILENAME),
  14.                  CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD
  15.              ),
  16.              parent::SELF_FIRST
  17.         );
  18.     }
  19.  
  20.     /**
  21.      * @return string
  22.      */
  23.     public function current()
  24.     {
  25.         $tree = '';
  26.          for ($l=0; $l < $this->getDepth(); $l++) {
  27.               $tree .= $this->getSubIterator($l)->hasNext() ? '| ' : '  ';
  28.          }
  29.          return $tree . ($this->getSubIterator($l)->hasNext() ? '|-' : '\-')
  30.                 . $this->getSubIterator($l)->__toString();
  31.     }
  32.  
  33.     public function __call($func, $params)
  34.     {
  35.         return call_user_func_array(array($this->getSubIterator(), $func), $params);
  36.     }
  37. }

modo de empleo:

Código PHP:
Ver original
  1. try{
  2.     $it = new DirectoryTreeIterator('/path/to/directory/');
  3.     foreach($it as $path) {
  4.         echo $path . PHP_EOL;
  5.     }
  6. }catch(UnexpectedValueException $e){
  7.     echo $e->getMessage() . PHP_EOL;
  8. }catch(RuntimeException $e){
  9.     echo $e->getMessage() . PHP_EOL;
  10. }

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)