【问题标题】:PHP Multi Directory deletePHP多目录删除
【发布时间】:2015-09-26 15:15:31
【问题描述】:

所以我正在创建一个图片上传网站,我需要同时删除多个目录和文件。我已经设法创建了可以完成这项工作的代码,但是我不确定这是否是“好代码”,因为我在重复自己。

下面有没有更好的写法?

$dirname = 'uploads/'.$album_id;
$dirnamethumb = 'uploads/thumbs/'.$album_id;

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);
    }
}

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

提前感谢您的帮助!

【问题讨论】:

  • 当你看到重复时,用你的数据循环:$dirs = array('uploads/'.$album_id, 'uploads/thumbs/'.$album_id);,然后循环$dirs 做你的事情......之后,我不知道“好方法” " 删除文件夹...有很多功能...你的看起来很干净。
  • 太棒了!现在是一半大小,非常感谢!!!

标签: php rmdir


【解决方案1】:

为什么不试试这个来自similar question的递归函数

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) 
      rrmdir($file); 
    else 
      unlink($file); 
  } rmdir($dir); 
}

【讨论】:

  • 你可能需要检查$file是否不是...,否则你将有一个无限递归循环......
【解决方案2】:

试试这个,

$dir = '/path/to/some/dir/'; // notice: trailing slash!
if ($handle = opendir($dir)) {
    while (false !== ($entry = readdir($handle))) {
        if (is_dir($dir . $entry) ) {
            rmdir($dir . $entry);
        }
    }
    closedir($handle);
}
?>

【讨论】:

  • 这不是只删除一个目录吗?我希望同时删除多个目录。因此我重复了代码
  • 对不起,我认为我没有很好地解释自己。请允许我重新表述:我希望删除父目录中的某些目录。用户可以选择删除将保存在“上传/相册名称”下的相册,并且相同图片的缩略图将保存在“上传/缩略图/相册名称”下。因此,我只想删除指定的目录。在上面的代码中,我循环并删除了一个目录中的所有文件,然后重复完全相同的代码,但文件路径不同。
猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多