Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/05/2011, 23:00
Avatar de djmashe
djmashe
 
Fecha de Ingreso: julio-2007
Ubicación: Posadas, Misiones
Mensajes: 52
Antigüedad: 17 años, 4 meses
Puntos: 2
Pregunta Eliminar carpetas recursivamente con PHP, con opciones

Saludos, se que en la web hay mucho info con respecto al borrado recursivo de carpetas en php, ya sea que estos tengan contenido y otras subcarpetas dentro, pero mi problema es el siguiente:
Necesito poder realizar el borrado a partir de un directorio dado y poder determinar si elimino tambien la carpeta que envio de referencia o si deseo eliminar solo el contenido que posea dentro suyo (archivos y/o subcarpetas), lo ejemplificare con la siguiente grafica:

Código HTML:
carpeta_01
|____ archivo_01
|____ archivo_02
|____ archivo_03
|____ carpeta_02
	  |____ archivo_04
	  |____ archivo_05	  
	  |____ carpeta_03	  
	  |____ carpeta_04	  
			|____ archivo_06
Teniendo en cuenta el ejemplo anterior, la idea seria enviar como parametros en una funcion:
  1. la ruta a partir del cual hacer el borrado de archivos y/o subcarpetas.
  2. un valor que indique si eliminar la carpeta que se envia como ruta principal.
A continuacion dejo un script que estoy intentando adaptar a esto que les comente, pero hasta el momento no puedo lograr que en caso de no querer eliminar la carpeta raiz de mi parametro, esto suceda ya que siempre me la elimina.

Código PHP:
Ver original
  1. <?php
  2. function deldir($directorio, $dirPrincipal, $delDirPasado)
  3. {  
  4.  $dirPrincipal = rtrim($dirPrincipal, '/') .'/';   
  5.  $directorio   = rtrim($directorio,   '/') .'/';
  6.  
  7.  $carpetaActual = opendir($directorio);
  8.  while(($enlace = readdir($carpetaActual)) !== false)
  9.  {
  10.   $porBorrar = $directorio . $enlace;
  11.   if(is_dir($porBorrar) && ($enlace != "." && $enlace != "..")) { deldir($porBorrar, $dirPrincipal, $delDirPasado); }
  12.   elseif($enlace != "." && $enlace != "..") { unlink($porBorrar); }
  13.  }
  14.  closedir($carpetaActual);
  15.  
  16.  if (strcasecmp($dirPrincipal, $directorio) == 0)
  17.  {
  18.   # 0: NO eliminar raiz | 1: SI eliminar raiz
  19.  if($delDirPasado == 1) { $directorio = $dirPrincipal; }
  20.  }
  21.  
  22.  rmdir($directorio);
  23. }
  24.  
  25. # llamada a la funcion: deldir(url_carpeta, url_carpeta, eliminarRaiz);
  26. # tanto el parametro 1 y 2 son iguales, el parametro 3 indica con 0: NO eliminar raiz | 1: SI eliminar raiz  
  27. deldir("carpeta_01", "carpeta_01", 0);
  28. ?>

Teniendo en cuenta esto, la idea es que si envio como carpeta a borrar "carpeta_01" y como parametro 3 el valor "0", no elimine la "carpeta_01", pero si envio como parametro 3 el valor "1" si lo haga.

Si prueban el ejemplo notaran que enviando 0 ó 1 en el parametro 3 de todas maneras borra la carpeta raiz pasada.

¿Alguien me podría ayudar para ver donde esta el error? Desde ya muchas gracias.

Última edición por djmashe; 09/05/2011 a las 05:29