从文件夹中删除多个文件

5
如何从文件夹中删除多个文件?
code:$query=$this->main_model->get($id);

if($query->num_rows()>0)
{
        foreach ($query->result() as $row)
        {
            unlink("uploads/".$id."/".$row->img_name);
            unlink("uploads/".$id."/".$row->img_name_tn);
            unlink("uploads/".$id."/".$row->file);
            unlink("uploads/".$id."/".$row->file2);
            unlink("uploads/".$id."/Thumbs.db");
        }
            rmdir("uploads/".$id);
}

这是我使用的代码,但它会一次性删除所有文件。如何从文件夹中删除所有文件?

4个回答

5

来自php.net:

<?php
 $dir = '/uploads/';
if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") { // strip the current and previous directory items
            unlink($dir . $file); // you can add some filters here, aswell, to filter datatypes, file, prefixes, suffixes, etc
        }
    }
    closedir($handle);
}
?>

循环性能真的很差!特别是在像NFS这样的网络文件系统中。PHP需要一个内置函数来快速删除整个目录。也许可以使用扩展来实现。 - Time Killer

3

我在php.net上找到了这个:

"The shortest recursive delete possible"

function rrmdir($path) {
   return is_file($path)?
     @unlink($path):
     array_map('rrmdir',glob($path.'/*'))==@rmdir($path)
   ;
}

2
你可以像这样做:
function delete_files($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);   
      }
   }
   closedir($dir_handle);
   return true;
}

1

你需要使用递归函数。rmdir页面的评论中已经写了一个如何实现的函数,可以查看http://www.php.net/manual/en/function.rmdir.php#98622。这段代码将删除文件夹及其内部所有内容。

<?php 
 function rrmdir($dir) { 
   if (is_dir($dir)) { 
     $objects = scandir($dir); 
     foreach ($objects as $object) { 
       if ($object != "." && $object != "..") { 
         if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); 
       } 
     } 
     reset($objects); 
     rmdir($dir); 
   } 
 } 
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接