Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   ARTES GRÁFICAS - Diseño, Firmas, WEBS. (http://foros.zackyfiles.com/forumdisplay.php?f=238)
-   -   Borrar directorios no vacios con php (http://foros.zackyfiles.com/showthread.php?t=372510)

calamaro2 14/11/2005 22:14

Borrar directorios no vacios con php
 
Hola,

Pues eso, lo que dice el titulo. Sabeis si exite alguna funcion ya hecha que permita borrar directorios no vacios en php?. La función rmdir no vale, solo vale si están vacios. Estoy usando una recursiva hecha por mi pero si existe una ya hecha quedaría más elegante usarla en lugar de la mia.
De todas formas por si alguien tiene el mismo problema y le da pereza hacerse una, aquí queda el código de la mía:

function EliminaDir($rutaDir){
$path=$rutaDir."*";
if(glob($path)!=NULL){
$cont=0;
foreach(glob($path) as $entrada){
if (is_file($entrada)){
$fichBorrar[$cont]=$entrada;
$cont++;
}
}
for ($i=0;$i<$cont;$i++)
unlink($fichBorrar[$i]);

if (glob($path)!=NULL){
foreach (glob($path) as $entrada){
if (is_dir($entrada)){
$nuevaRuta=$entrada."/";
EliminaDir($nuevaRuta);
}
}
}
}
rmdir($rutaDir);
}

Saludos y gracias,

calamaro2.

Coke 16/11/2005 01:32

que yo sepa no se puede, primero hay que borrar los archivos y despues los directorios,, como tu has hecho...la funcion que has hecho esta muy bien, yo la haria asi, modificando un poquito la tuya...te ahorras el bucle y el array y por otro lado comprueba que sea un directorio $rutaDir, para que no te de error rmdir($rutaDir); si no lo fuera o no existiera.

Código PHP:

function EliminaDir($rutaDir){
    if(!
is_dir($rutaDir)) {
        return;
    }
    else {
        
$path $_SERVER['DOCUMENT_ROOT'].''.$rutaDir."*";
    }
    if(
glob($path)!=NULL){
        foreach(
glob($path) as $entrada){
            if (
is_file($entrada)){
                
unlink($entrada);
            }
        }
        if (
glob($path)!=NULL){
            foreach (
glob($path) as $entrada){
                if (
is_dir($entrada)){
                    
$nuevaRuta=$entrada."/";
                    
EliminaDir($nuevaRuta);
                }
            }
        }
    }
    
rmdir($rutaDir);


Coke.

Coke 16/11/2005 01:47

asi tambien va bien...

Código PHP:

function EliminaDir($rutaDir){
    if(!
is_dir($rutaDir)) {
        return;
    }
    else {
        
$path $_SERVER['DOCUMENT_ROOT'].''.$rutaDir."*";
    }
    if(
glob($path)!=NULL){
        foreach(
glob($path) as $entrada){
            if (
is_file($entrada)){
                
unlink($entrada);
            }
            else {
                
$nuevaRuta $entrada."/";
                
EliminaDir($nuevaRuta);
            }
        }
    }
    
rmdir($rutaDir);


Coke.

calamaro2 17/11/2005 00:41

Ok, gracias Coke,

Yo hacia el bucle con el for por "precaución". Tuve problemas al borrar nodos de un arbol DOM al hacer un foreach. No me los recorria todos si me cargaba uno dentro del foreach. Cuando borraba uno me los movia todos una posicion y en la siguiente iteración avanzaba una posición. Uséase, me cargaba un nodo y el siguiente a este que me cargaba no lo chequeaba, se lo saltaba. Por eso lo había hecho así. Pensé que en este caso me iba a hacer lo mismo.

Y no fui capaz de poner el código sangrado como has hecho tu :P

Saludos,

calamaro2.


La franja horaria es GMT +2. Ahora son las 00:05.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate