Pregunta

rmdir("./uploads/temp/".$user."/");

Tengo muchos archivos en un directorio que deseo eliminar en mi script PHP, sin embargo, estas no es una forma para que no me desintegue () el archivo primero. ¿Hay alguna forma de hacer?

unlink(* FROM (dir=)) // don't downvote the long shot
// delete all files from the dir first
// then delete that dir 

Referencia Un directorio debe estar vacío para eliminarlo, ver php.net/manual/en/function.rmdir.php

¿Fue útil?

Solución

No hay otra forma excepto para eliminar todos los archivos primero usando de una forma u otra y luego eliminar el directorio.

public static function deleteDir($dirPath) {
if (! is_dir($dirPath)) {
    throw new InvalidArgumentException('$dirPath must be a directory');
}
if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
    $dirPath .= '/';
}
$files = glob($dirPath . '*', GLOB_MARK);
foreach ($files as $file) {
    if (is_dir($file)) {
        self::deleteDir($file);
    } else {
        unlink($file);
    }
}
rmdir($dirPath);
}

Otros consejos

Puedes usar el Directorio y unlink juntos.

utilizar este

function delete_directory($dirname) {
   if (is_dir($dirname))
      $dir_handle = opendir($dirname);
   if (!$dir_handle)
      return false;
   while($file = readdir($dir_handle)) {
      if ($file != "." && $file != "..") {
         if (!is_dir($dirname."/".$file))
            unlink($dirname."/".$file);
         else
            delete_directory($dirname.'/'.$file);    
      }
   }
   closedir($dir_handle);
   rmdir($dirname);
   return true;
}

Este código se puede mejorar fácilmente, ya que es un truco rápido, pero toma un directorio como argumento y luego usa la recursión funcional para eliminar todos los archivos y carpetas dentro, y finalmente elimina el directorio. Agradable y rápido también.

Intenta usar parar para recorrer los archivos en el directorio para eliminar

foreach (glob('/path/to/directory/*') as $file){
    unlink('/path/to/directory/' . $file);
}

Mira esto http://lixlpixel.org/recursive_function/php/recursive_directory_delete/

function recursive_remove_directory($directory, $empty=FALSE)
    {
        if(substr($directory,-1) == '/')
        {
            $directory = substr($directory,0,-1);
        }
        if(!file_exists($directory) || !is_dir($directory))
        {
            return FALSE;
        }elseif(is_readable($directory))
        {
            $handle = opendir($directory);
            while (FALSE !== ($item = readdir($handle)))
            {
                if($item != '.' && $item != '..')
                {
                    $path = $directory.'/'.$item;
                    if(is_dir($path)) 
                    {
                        recursive_remove_directory($path);
                    }else{
                        unlink($path);
                    }
                }
            }
            closedir($handle);
            if($empty == FALSE)
            {
                if(!rmdir($directory))
                {
                    return FALSE;
                }
            }
        }
        return TRUE;
    }

Puedes eliminarlo recursivamente:

public function delete_folder ($path) { 
    $handle = opendir($path); 
    while ($file = readdir($handle)) { 
        if ($file != '..' && $file != '.') { 
            if (is_file($path . DS . $file))
                unlink($path . DS . $file); 
            else 
                delete_folder($path . DS . $file);
        } 
    } 
    closedir($handle); 
    rmdir($tmp_path); 
} 

delete_folder('path/to/folder');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top