Foros del Web » Programando para Internet » PHP »

PHP OO borrar directorio y subdirectorios con archivos dentroto

Estas en el tema de borrar directorio y subdirectorios con archivos dentroto en el foro de PHP en Foros del Web. alguien me podria ayudar explicandome como puedo realizar la eliminacion de una carpeta con mas directorios y archivos dentro? tengo una app que crea clientes ...
  #1 (permalink)  
Antiguo 16/03/2011, 08:38
 
Fecha de Ingreso: marzo-2011
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
borrar directorio y subdirectorios con archivos dentroto

alguien me podria ayudar explicandome como puedo realizar la eliminacion de una carpeta con mas directorios y archivos dentro? tengo una app que crea clientes con su respectiva carpeta ysubcarpeta de archivos pero al listarlos no se que funcion invocar o de que manera invocarla para cada cliente me explico?
  #2 (permalink)  
Antiguo 16/03/2011, 09:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: borrar directorio y subdirectorios con archivos dentroto

Yo lo hago así
Código PHP:
Ver original
  1. <?php
  2. function deleteFile($path){
  3.     return is_file($path)
  4.         ? unlink($path)
  5.         : array_map('deleteFile', glob($path.'/*')) == deleteFile($path);
  6. }
  7. deleteFile('directorio');
Ten cuidado, debes saber que directorio indicar porque si no te borará todo lo que encuentre en el directorio que le menciones.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 16/03/2011, 09:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: borrar directorio y subdirectorios con archivos dentroto

es un tema algo complicado, ya que necesitas usar funciones recursivas... y claro, unlink() para borrar archivos y rmdir() para borrar carpetas...

claro que es el mismo concepto para listar carpetas, si buscas en el foro seguro encuentras algo...

Edito: muy buena función abimaelrc
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 16/03/2011, 13:34
 
Fecha de Ingreso: marzo-2011
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: borrar directorio y subdirectorios con archivos dentroto

muchas gracias abimaelrc esta interesante ya he buscado bastante en el foro y he probado y aun no me ha funcionado intentare con la tuya que tal
  #5 (permalink)  
Antiguo 16/03/2011, 13:42
 
Fecha de Ingreso: marzo-2011
Mensajes: 5
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: borrar directorio y subdirectorios con archivos dentroto

Cita:
Iniciado por abimaelrc Ver Mensaje
Yo lo hago así
Código PHP:
Ver original
  1. <?php
  2. function deleteFile($path){
  3.     return is_file($path)
  4.         ? unlink($path)
  5.         : array_map('deleteFile', glob($path.'/*')) == deleteFile($path);
  6. }
  7. deleteFile('directorio');
Ten cuidado, debes saber que directorio indicar porque si no te borará todo lo que encuentre en el directorio que le menciones.
mira yo estoy utilizando esto para listar mis carpetas

<?php

{
$dir = "./";
$directorio=opendir($dir);
echo "<br>";
while ($archivo = readdir($directorio)){
if($archivo=='.' or $archivo=='..' or $archivo=='index.php'){
echo "";
}else {
$enlace = $dir.$archivo;



echo "<ul type='square'><li>";
echo "<a href=$enlace>$archivo<br></a>";
echo "</li></ul>";

}
}
closedir($directorio);
}

?>

la cosa es que no logro captar como aplicar ese ejemplo q me diste para direccionarlo a cada carpeta me explico?para que borre la carpeta q deseo
  #6 (permalink)  
Antiguo 16/03/2011, 17:35
 
Fecha de Ingreso: enero-2011
Ubicación: Argentina
Mensajes: 80
Antigüedad: 13 años, 3 meses
Puntos: 12
Respuesta: borrar directorio y subdirectorios con archivos dentroto

Borrar un directorio no vacio con PHP

Código PHP:
Ver original
  1. /**
  2.  * Remove a non empty directory
  3.  * @author Cristián Pérez
  4.  * @param string $path Folder Path
  5.  * @return bool
  6.  */
  7. function removeDirectory($path)
  8. {
  9.     $path = rtrim( strval( $path ), '/' ) ;
  10.  
  11.     $d = dir( $path );
  12.  
  13.     if( ! $d )
  14.         return false;
  15.  
  16.     while ( false !== ($current = $d->read()) )
  17.     {
  18.         if( $current === '.' || $current === '..')
  19.             continue;
  20.  
  21.         $file = $d->path . '/' . $current;
  22.  
  23.         if( is_dir($file) )
  24.             removeDirectory($file);
  25.  
  26.         if( is_file($file) )
  27.             unlink($file);
  28.     }
  29.  
  30.     rmdir( $d->path );
  31.     $d->close();
  32.     return true;
  33. }


Fuente:
http://www.cristianperez.com/2010/01...vacio-con-php/

Saludos.
  #7 (permalink)  
Antiguo 16/03/2011, 17:46
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 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 :)
  #8 (permalink)  
Antiguo 16/03/2011, 19:31
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: borrar directorio y subdirectorios con archivos dentroto

Es un buen tema para seguir y sugerir

@masterpuppet, ¿el __call no hace nada en ese ejemplo, pero me imagino que se puede unir con la de borrar?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 17/03/2011, 09:51
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: borrar directorio y subdirectorios con archivos dentroto

Que tal abimaelrc,

el __call no hace nada en el ejemplo de uso, pero si tiene un razón de ser, es un proxy al RecursiveCachingIterator, con respecto a unirlos, habria que ver, los Traversables son diferentes, y necesitan flags especificos para funcionar correctamente, si son una única clase tendrias que estar controlando el tipo de Traversable, creo que seria mas viable hacer un componente con los mas comunes y un set de decorators para la visualización, podria ser algo interesante .

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 02/05/2011, 15:08
 
Fecha de Ingreso: febrero-2011
Mensajes: 62
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: borrar directorio y subdirectorios con archivos dentroto

Una buena función esta ya en el foro

http://www.forosdelweb.com/f18/borrar-directorio-con-php-830895/

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 11:15.