Foros del Web » Programando para Internet » PHP »

borrado de directorio en servidor

Estas en el tema de borrado de directorio en servidor en el foro de PHP en Foros del Web. Hola a todos,el problema que tengo es que tengo una carpeta creada en el servidor con permisos 077,y al intentar borrarla con "rmdir" no me ...
  #1 (permalink)  
Antiguo 04/10/2005, 02:17
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
borrado de directorios

Hola a todos,el problema que tengo es que tengo una carpeta creada en el servidor con permisos 077,y al intentar borrarla con "rmdir" no me la borra.Dentro de la carpeta tengo otra carpeta y ficheros.
Como puedo hacer??
  #2 (permalink)  
Antiguo 04/10/2005, 02:28
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
rmdir() no puede borrar directorios con contenido. Primero necesitas vaciarlo; abrirlo, recorrerlo, borrar archivos, hacer lo mismo con subdirectorios...

Ve en la documentación oficial, seguramente ya habrán comentado alguna función que haga eso (ve los comentarios de los usuarios): www.php.net/rmdir

Si quieres hacer tu función consulta las funciones opendir(), is_dir(), unlink() y rmdir()... para empezar...

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 04/10/2005, 10:03
 
Fecha de Ingreso: octubre-2004
Mensajes: 751
Antigüedad: 19 años, 6 meses
Puntos: 4
Creo recordar que esta función la encontré en unos de los comentarios de www.php.net. Lo que hace es recorrer todo el directorio y va eliminando todos los directorios y subdirectorios que encuentra hasta que se elimina absolutamente todo.

Código PHP:
$directorio="Directorio/";//cambia aquí el directorio que quieras eliminar
function rmdirr($dir) {
           if(
$objs glob($dir."/*")){
               foreach(
$objs as $obj) {
                      
is_dir($obj)? rmdirr($obj) : unlink($obj);
               }
           }
           
rmdir($dir);
    } 
    
rmdirr($directorio);//se llama a la función con el directorio por parametro 
A ver si te funciona.

Saludos,
__________________
sergiold
  #4 (permalink)  
Antiguo 11/10/2005, 01:14
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación borrado de directorio en servidor

El problema que tengo es que este codigo no me elimina el directorio del servidor y no se por que.Primero bnorro los ficheros del directorio padre,luego los del hijo y luego borro la carpeta hijo y la padre.
Cual es el fallo????
El esquema de carpetas que tengo es el siguiente:

CARPETA (PADRE)
|
|
ficheros.xxx
CARPETA (HIJO)
|
|
ficheros.xxx


$ruta1 es la ruta de la carpeta padre.
$ruta2 es la ruta de la carpeta hijo.

Código PHP:
function contr_baja_inmobiliaria_directorio($ruta1,$ruta2){

               
$dh  opendir($ruta1);
               
$dh2 opendir($ruta2);
               while(
false !== ($nombre_archivo readdir($dh))){
                      
$archivos[] = $nombre_archivo;
               }
               while(
false !== ($nombre_archivo2 readdir($dh2))){
                      
$archivos2[] = $nombre_archivo2;
               }

               
sort($archivos);
               
sort($archivos2);
               
$borrado=true;
               
$borrado2=true;

               foreach(
$archivos as $files){
                       if(
$files !='.'){
                          if(
$files !='..'){
                             
rmdir($ruta1.'/'$files);
                          }else{
                                
$borrado=false;
                                
close($dh);
                                return 
$borrado;
                          }
                       }
               }
               foreach(
$archivos2 as $files2){
                       if(
$files2 !='.'){
                          if(
$files2 !='..'){
                             
rmdir($ruta2.'/'.$files2);
                          }else{
                               
$borrado2=false;
                               
close($dh2);
                               return 
$borrado2;
                          }
                       }
               }
               if(
$borrado && $borrado2){
                 
rmdir($ruta2);
                 
rmdir($ruta1); 
                 
close($dh);
                 
close($dh2);
                 return 
true;
               }
         } 
  #5 (permalink)  
Antiguo 11/10/2005, 08:39
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
He probado a hacerlo con el codigo que me enviaste sergiold
Código PHP:
$directorio="Directorio/";//cambia aquí el directorio que quieras eliminar 
function rmdirr($dir) { 
           if(
$objs glob($dir."/*")){ 
               foreach(
$objs as $obj) { 
                      
is_dir($obj)? rmdirr($obj) : unlink($obj); 
               } 
           } 
           
rmdir($dir); 
    } 
    
rmdirr($directorio);//se llama a la función con el directorio por parametro 
pero tampoco los elimina,no se cual puede ser el error,hasta antes de borrarlos he probado a hacer un chmod con 0777 y aun asi nada.
  #6 (permalink)  
Antiguo 11/10/2005, 09:36
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 18 años, 7 meses
Puntos: 0
Con esto borras cualquier cosa.

Un saludo.
Código PHP:
    function remove_dir$dir ) {
        
$err false;
        if( 
file_exists$dir ) ) {
            
$handle opendir$dir );
            while( 
false !== ($item readdir$handle ) ) ) {
                if( 
$item != '.' && $item != '..' ) {
                    if( 
is_dir$dir.'/'.$item ) ) {
                        @
chmod$dir.'/'.$item0777 );
                        
remove_dir$dir.'/'.$item );
                    }
                    else {
                        
unlink$dir.'/'.$item );
                    }
                }
            }
            
closedir$handle );
            if( 
rmdir$dir ) ) {
                
$err true;
            }
        }
        else
            
$err true;
            
        return 
$err;
    } 
  #7 (permalink)  
Antiguo 11/10/2005, 14:44
 
Fecha de Ingreso: abril-2003
Ubicación: Córdoba
Mensajes: 160
Antigüedad: 21 años
Puntos: 0
De acuerdo

esta es la funcion a utilizar:

function deldir($dir){
$current_dir = opendir($dir);
while($entryname = readdir($current_dir)){
if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")){
chmod("${dir}/${entryname}" , 0777 );
deldir("${dir}/${entryname}");
}elseif($entryname != "." and $entryname!=".."){
chmod("${dir}/${entryname}" , 0777 );
unlink("${dir}/${entryname}");
}
}
closedir($current_dir);
rmdir(${dir});
}

asegurate de cuando llames la funcion, pongas correctamente la ruta del directorio, por ejemplo si la pagina que contiene el script esta en la carpeta raiz, y el directorio a borrar se llama fotos y esta dentro de la carpeta imagenes deberas poner asi:

deldir("imagenes/fotos");

estoy seguro que con esto lo solucionas, adiocelli.
__________________
-----------------
_
__|_|__
º(-_-)º
  #8 (permalink)  
Antiguo 13/10/2005, 01:18
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
Cita:
Iniciado por Shockly
Con esto borras cualquier cosa.

Un saludo.
Código PHP:
    function remove_dir$dir ) {
        
$err false;
        if( 
file_exists$dir ) ) {
            
$handle opendir$dir );
            while( 
false !== ($item readdir$handle ) ) ) {
                if( 
$item != '.' && $item != '..' ) {
                    if( 
is_dir$dir.'/'.$item ) ) {
                        @
chmod$dir.'/'.$item0777 );
                        
remove_dir$dir.'/'.$item );
                    }
                    else {
                        
unlink$dir.'/'.$item );
                    }
                }
            }
            
closedir$handle );
            if( 
rmdir$dir ) ) {
                
$err true;
            }
        }
        else
            
$err true;
            
        return 
$err;
    } 
Muchas gracias el escrip que me enviaste funciona a las mil maravillas.
Gracias.
  #9 (permalink)  
Antiguo 13/10/2005, 08:29
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación

Esto es un escandalo!!!!!!
La funcion que me envio "Shockly" me funciona si la estructura de carpetas la creo yo a pelo,en windows,sin embargo si intento borrar una estructura de carpetas creada desde PHP,únicamente me elimina los ficheros u no me elimina las carpetas.
Cual es el error???
  #10 (permalink)  
Antiguo 13/10/2005, 08:36
 
Fecha de Ingreso: octubre-2004
Mensajes: 751
Antigüedad: 19 años, 6 meses
Puntos: 4
Y cómo estás creando las carpetas?

El código que te he pasado lo utilizo para eliminar sistemas de directorios y subdirectorios, y con archivos en todo ellos y todo esto creado desde PHP y no me da ningún problema.

Saludos,
__________________
sergiold
  #11 (permalink)  
Antiguo 13/10/2005, 08:46
 
Fecha de Ingreso: junio-2004
Ubicación: ORENSE
Mensajes: 258
Antigüedad: 19 años, 10 meses
Puntos: 0
Exclamación

Las carpetas y los ficheros que hay en ellas las creo mediante un script php.
Yo creo que el problema puede ser que un cliente web no tenga permisos de borrado de directorios por eso solo me elimina los ficheros.
Sabes donde se configuran los permisos en el Apache para poder borrar carpetas???
  #12 (permalink)  
Antiguo 13/10/2005, 09:29
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 18 años, 7 meses
Puntos: 0
Cita:
Iniciado por bananas
Esto es un escandalo!!!!!!
La funcion que me envio "Shockly" me funciona si la estructura de carpetas la creo yo a pelo,en windows,sin embargo si intento borrar una estructura de carpetas creada desde PHP,únicamente me elimina los ficheros u no me elimina las carpetas.
Cual es el error???
Pues no sé cual será el error en tu caso, pero precisamente esa función es la que yo uso para eliminar carpetas y su contenido de carpetas/files creados por otros scripts PHP -con permisos "exóticos"- e imposibles de borrar desde FTP.

Un saludo.
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




La zona horaria es GMT -6. Ahora son las 01:53.