Pregunta

La función rmdir() falla si la carpeta contiene ningún archivo. Que pueda recorrer todos los archivos en el directorio con algo como esto:

foreach (scandir($dir) as $item) {
    if ($item == '.' || $item == '..') continue;
    unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);

¿Hay alguna manera de simplemente borrar todo de una vez?

¿Fue útil?

Solución

Bueno, siempre hay

system('/bin/rm -rf ' . escapeshellarg($dir));

cuando estén disponibles.

Otros consejos

rrmdir() - recursiva eliminar directorios:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
function delete_files($dir) {
  if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir") 
           delete_files($dir."/".$object); 
        else unlink   ($dir."/".$object);
      }
    }
    reset($objects);
    rmdir($dir);
  }
 }

Según esta fuente ;

Ahorra un poco de tiempo, si usted quiere limpiar un directorio o eliminarlo y estás en Windows.

Usar este:

    chdir ($file_system_path);
    exec ("del *.* /s /q");

Puede utilizar otra sintaxis DEL o cualquier otro util cáscara. Puede que tenga que permitir que el servicio interactúe con el escritorio, ya que es mi configuración actual y no estoy cambiándolo a probar esto.

Otra cosa que podría encontrar un método alternativo aquí.

Prueba esto:

exec('rm -rf '.$user_dir);

Esta fuction borrar el directorio y todos los subdirectorios y archivos:

function DelDir($target) {
    if(is_dir($target)) {
        $files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

        foreach( $files as $file )
        {
            DelDir( $file );      
        }

        rmdir( $target );
    } elseif(is_file($target)) {
        unlink( $target );  
    }
}

Una de las funciones de seguridad y buen situado en los comentarios php por lprent Impide el borrado accidental de contenido de los directorios de enlaces simbólicos ubicados en el directorio actual

public static function delTree($dir) { 
   $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
      (is_dir("$dir/$file") && !is_link($dir)) ? delTree("$dir/$file") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
  } 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top