Foros del Web » Programando para Internet » PHP »

Borrar directorios de golpe

Estas en el tema de Borrar directorios de golpe en el foro de PHP en Foros del Web. Me gustaria si alguien puedo que me facilitase un script para borrar todos los directorios de una carpeta y sus contenidos , es posible hacer ...
  #1 (permalink)  
Antiguo 18/11/2006, 20:07
(Desactivado)
 
Fecha de Ingreso: septiembre-2006
Mensajes: 216
Antigüedad: 17 años, 7 meses
Puntos: 0
Exclamación Borrar directorios de golpe

Me gustaria si alguien puedo que me facilitase un script para borrar todos los directorios de una carpeta y sus contenidos , es posible hacer esto , saludos a todos como siempre y gracias
  #2 (permalink)  
Antiguo 18/11/2006, 20:28
Avatar de Falhor  
Fecha de Ingreso: diciembre-2005
Ubicación: Buenos Aires
Mensajes: 425
Antigüedad: 18 años, 4 meses
Puntos: 5
Código PHP:
$directorio "DIRECTORIO A ELIMINAR";
unlink($directorio
No estoy seguro, proba y decime...
  #3 (permalink)  
Antiguo 18/11/2006, 20:38
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
unlink elimina archivos.

Para eliminar directorios, se utiliza rmdir(), pero este solo sirve si el directorio está vacío.

Podríamos, sin embargo, borrar su contenido y entonces el directorio:

Código PHP:
<? 

$directorio 
"nombre_del_directorio_a_borrar" //Lo sacas de donde sea.. a traves de post, get, lo que quieras.

$archivos scandir($directorio); //hace una lista de archivos del directorio
$num count($archivos); //los cuenta

//Los borramos
for ($i=0$i<=$num$i++) {
 
unlink ($archivos[$i]); 
}

//borramos el directorio

rmdir ($directorio);

?>
En forma de función:

Código PHP:
<? 
function BorrarDirectorio($directorio) {

$archivos scandir($directorio); //hace una lista de archivos del directorio
$num count($archivos); //los cuenta

//Los borramos
for ($i=0$i<=$num$i++) {
 
unlink ($archivos[$i]); 
}

//borramos el directorio

rmdir ($directorio);
}
?>
Si lo haces de esta forma sólo tienes que usar este comando para borrar un directorio:

Código:
BorrarDirectorio();
Por ejemplo:

Código:
BorrarDirectorio("imagenes");

Última edición por david_M_G; 18/11/2006 a las 20:48
  #4 (permalink)  
Antiguo 18/11/2006, 21:12
(Desactivado)
 
Fecha de Ingreso: septiembre-2006
Mensajes: 216
Antigüedad: 17 años, 7 meses
Puntos: 0
Exclamación Si pero ......

Es que resulta que scandir es para php5 , por otro lado esa funcion me permitiria borrar el contenido de un directorio y los archivos que esan dentro pero yo decia en el caso de qu hubiese mas de un directorio , si tengo un directorio denominado 01 y dentro dos mas y con archivos que funcion deberia usar para borrar todo de golpe , espero haberme explicado ahora , no obstante muchas gracias y se agradece cualqueir sugerencia o script , saludos y muchas gracias
  #5 (permalink)  
Antiguo 18/11/2006, 21:54
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Ok, te propongo esta variación...

Código PHP:
<? 
function BorrarDirectorio($directorio) {

//Comprobamos que sea un directorio valido
if (is_dir($directorio)) {

//Lo exploramos
$gd opendir($dir);

//Listamos archivos
       
while (($archivo readdir($gd)) !== false) {

//Quitamos los directorios "." y ".." 
if ($archivo != "." && $archivo != "..") {

//Comprobamos si es un directorio.....
if (is_dir($archivo)) { 
rmdir($archivo); 

//....... o bien es un archivo
} else {
unlink($archivo);
}

}

} else {

exit (
"Estas intentando borrar un directorio no valido");

}

}
}
El inconveniente que veo es que los subdirectorios, si tienen contenidos, no los borrará. Pero la idea es esa...
  #6 (permalink)  
Antiguo 18/11/2006, 22:51
Avatar de Falhor  
Fecha de Ingreso: diciembre-2005
Ubicación: Buenos Aires
Mensajes: 425
Antigüedad: 18 años, 4 meses
Puntos: 5
Estuve probando esto con un monton de cambios mas y no funciona... Intente poner whiles o mas ifs pero nada funciona... A ver si en base a esto pueden sacar algo...
Código PHP:
<?
    
function BorrarDirectorio(){
        
$direc "DIRECTORIO";
        
chdir($direc);
        
$dir opendir("."); 
        while(
$arch readdir($dir))
        {
                if(!
file_exists($arch))
                {
                    
chdir("..");
                }elseif(
file_exists($arch))
                {
                    if(
is_dir($arch))
                    {
                        
chdir("." "\\" $arch);
                    }else{
                    
unlink($arch);
                    }
                }
        }
    }
?>
Obviamente no esta terminado, la cosa es que sea asi: si el archivo no existe vuelve al directorio anterior (habria que hacerle una restriccion para que no baje a menos que $direc), si existe y es directorio entra al directorio y ahi vuelve el ciclo y elimina los archivos porque si no es directorio no los elimina... Seria algo asi:

Carpeta
--------archivo1
--------subcarpeta1
-----------------------archivo3
-----------------------archivo4
-----------------------subcarpeta2
----------------------------------- (en esta carpeta no hay nada)
--------archivo2

Elimina archivo 1, pasa a subcarpeta 1, al ser dir entra, eliminar archivo 3 y 4, al encontrar subcarpeta2 entra y como no hay nada vuelve (y ahi lo tendria que eliminar), como no hay nada mas en subcarpeta1 lo tendria que eliminar y volver atras entonces elimina el archivo restante (archivo2) y despues elimina carpeta.

No parece imposible, te recomiendo que leas esto http://es2.php.net/manual/es/ref.dir.php igual voy a estar intentando hacerlo.

Última edición por Falhor; 18/11/2006 a las 23:00
  #7 (permalink)  
Antiguo 18/11/2006, 23:34
Avatar de Falhor  
Fecha de Ingreso: diciembre-2005
Ubicación: Buenos Aires
Mensajes: 425
Antigüedad: 18 años, 4 meses
Puntos: 5
Mhh... que puede ser esto?

Cita:
Warning: chdir(): SAFE MODE Restriction in effect. The script whose uid is 48 is not allowed to access .. owned by uid 0 in /home/directorio/dirs.php on line 10
(En local no me deja por los permisos, no puedo cambiar el solo lectura =S)
  #8 (permalink)  
Antiguo 19/11/2006, 00:17
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 2 meses
Puntos: 25
eso quiere decir que el usuario que intenta eliminar el archivo ó cambiar los permisos no es el usuario que usas en php.

Saludos
__________________
Hospedaje Web al mejor costo!
  #9 (permalink)  
Antiguo 19/11/2006, 08:01
(Desactivado)
 
Fecha de Ingreso: septiembre-2006
Mensajes: 216
Antigüedad: 17 años, 7 meses
Puntos: 0
Falhor voy a probar tu script a ver si funciona y te digo , proque yo tb trate de hacer algo similar y no pase de dos niveles para el borrado de directorios y seria un script muy util el poder desrrollarlo y asi borrar de un tiron directorios y subdirectorios , bueno lo pruebo y te comento como siempre saludos
  #10 (permalink)  
Antiguo 19/11/2006, 10:23
Avatar de Falhor  
Fecha de Ingreso: diciembre-2005
Ubicación: Buenos Aires
Mensajes: 425
Antigüedad: 18 años, 4 meses
Puntos: 5
Mira yo el PHP que probe cuando me salio el warning ese fue asi:

Código PHP:
<?
    
function BorrarDirectorio(){
        
$direc ".\directorio";
        
chdir($direc);
        
$dir opendir("."); 
        while(
$arch readdir($dir))
        {
                if(!
file_exists($arch))
                {
                    
chdir("..");
                }elseif(
file_exists($arch))
                {
                    if(
is_dir($arch))
                    {
                        if(
filesize($arch) == 0)
                        
rmdir($arch);
                        }else{
                        
chdir("." "\\" $arch);
                        }
                }else{
                    
unlink($arch);
                }
                }
        }
    
BorrarDirectorio();
?>
El tema igual si te funciona es que si la carpeta tiene otra carpeta adentro sin contenido ninguna de las dos no las elimina porque dice que si pesa 0 bytes (No tiene ningun archivo) lo elimine, pero si tiene otra carpeta no se podria...

Buen no se fijate.
  #11 (permalink)  
Antiguo 19/11/2006, 12:00
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
me suscribo a este post.
por ke puede ke necesite este codigo
Bye
  #12 (permalink)  
Antiguo 19/11/2006, 14:18
(Desactivado)
 
Fecha de Ingreso: septiembre-2006
Mensajes: 216
Antigüedad: 17 años, 7 meses
Puntos: 0
A mi no me furula el script , nu se que le pasara bueno a ver si alguien tiene mas ideas ceo este post puede dar mucho de si saludos a todos
  #13 (permalink)  
Antiguo 19/11/2006, 20:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por gsmmixer Ver Mensaje
A mi no me furula el script , nu se que le pasara bueno a ver si alguien tiene mas ideas ceo este post puede dar mucho de si saludos a todos
Saben .. lo que están intentado hacer por aquí alguna persona ya lo ha hecho. No estoy desmereciendo sus instentos ni ganas de aprender haciendolo (eso es digno de valorar) .. Pero, si se fijan siempre en el manual oficial de PHP sobre ciertas funciones (como en este caso "unlink()" veran soluciones ya implementadas al caso:

Por ejemplo ...

Borrado de todos los archivos y directorios hacia abajdo desde una ruta (absoluta) dada, y no sólo eso .. pueden borrar usando "comodines" (*.ext) entre otras cosas ... :

Cita:
bishop
05-Jun-2005 03:30
Código PHP:
<?php
/**
 * rm() -- Vigorously erase files and directories.
 * 
 * @param $fileglob mixed If string, must be a file name (foo.txt), glob pattern (*.txt), or directory name.
 *                        If array, must be an array of file names, glob patterns, or directories.
 */
function rm($fileglob)
{
   if (
is_string($fileglob)) {
       if (
is_file($fileglob)) {
           return 
unlink($fileglob);
       } else if (
is_dir($fileglob)) {
           
$ok rm("$fileglob/*");
           if (! 
$ok) {
               return 
false;
           }
           return 
rmdir($fileglob);
       } else {
           
$matching glob($fileglob);
           if (
$matching === false) {
               
trigger_error(sprintf('No files match supplied glob %s'$fileglob), E_USER_WARNING);
               return 
false;
           }      
           
$rcs array_map('rm'$matching);
           if (
in_array(false$rcs)) {
               return 
false;
           }
       }      
   } else if (
is_array($fileglob)) {
       
$rcs array_map('rm'$fileglob);
       if (
in_array(false$rcs)) {
           return 
false;
       }
   } else {
       
trigger_error('Param #1 must be filename or glob pattern, or array of filenames or glob patterns'E_USER_ERROR);
       return 
false;
   }

   return 
true;
}
?>
Acabo de conocer la función "glob" .. bien curiosa y efectiva, nos permite en este caso usar "comines" (wildcarts) para por ejemplo borrar todo archivo de un directorio dado:

Cita:
tristan
16-Oct-2006 01:01
to delete all the files in a directory

Código PHP:
<?php

foreach (glob("directorypath/*.*") as $filename)
{
       
unlink($filename);
}

?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:06.