PHP删除特定文件夹及其所有内容(php deleting a specific folder an

2019-09-23 02:40发布

我使用PHP删除包含在哪里删帖的图片文件夹。 我使用的是低于我在网上找到,并做了很好的工作的代码。

我想知道我怎么能只删除特定文件夹的文件夹中时,中间有其他文件夹。

当我使用下面的代码,怎么可能做到这一点? 使用是:/ dev /图片/诺曼/ 8 - >不会删除文件夹8使用是:/ dev /图片/诺曼/ - >将删除所有文件夹

Eg:
/dev/images/norman/8 -> I need to delete only this folder
/dev/images/norman/9
/dev/images/norman/10
/dev/images/norman/11
/dev/images/norman/12

<?php
$path = $_SERVER['DOCUMENT_ROOT'].'/dev/images/norman/8';

emptyDir($path);

function emptyDir($path) { 

    // INITIALIZE THE DEBUG STRING
    $debugStr  = '';
    $debugStr .= "Deleting Contents Of: $path<br /><br />";

    // PARSE THE FOLDER
    if ($handle = opendir($path)) {

        while (false !== ($file = readdir($handle))) {

            if ($file != "." && $file != "..") {

                // IF IT"S A FILE THEN DELETE IT
                if(is_file($path."/".$file)) {

                    if(unlink($path."/".$file)) {
                    $debugStr .= "Deleted File: ".$file."<br />";   
                    }

                } else {

                    // IT IS A DIRECTORY
                    // CRAWL THROUGH THE DIRECTORY AND DELETE IT'S CONTENTS

                    if($handle2 = opendir($path."/".$file)) {

                        while (false !== ($file2 = readdir($handle2))) {

                            if ($file2 != "." && $file2 != "..") {
                                if(unlink($path."/".$file."/".$file2)) {
                                $debugStr .= "Deleted File: $file/$file2<br />";    
                                }
                            }

                        }

                    }

                    if(rmdir($path."/".$file)) {
                    $debugStr .= "Directory: ".$file."<br />";  
                    }

                }

            }

        }

    }
    echo $debugStr;
}

?>

Answer 1:

<?php

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

如果你正在使用,5.1及以上版本,

<?php
function deleteDir($dir) {
   $iterator = new RecursiveDirectoryIterator($dir);
   foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) 
   {
      if ($file->isDir()) {
         rmdir($file->getPathname());
      } else {
         unlink($file->getPathname());
      }
   }
   rmdir($dir);
}

deleteDir("temporary");
?>


Answer 2:

你想听到rmdir

if(is_file($path."/".$file)) {

    if(unlink($path."/".$file)) {
    $debugStr .= "Deleted File: ".$file."<br />";   
    }

} else {

    if(rmdir($path."/".$file)) {
        $debugStr .= "Deleted Directory: ".$file."<br />";   
    }

}

编辑:作为rmdir只能处理空迪尔斯,你可以在命令rmdir的页面评论报告使用此解决方案:

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

它只是递归删除一切都在$dir ,然后摆脱目录本身。



Answer 3:

我添加了一个$exclude参数去你的函数,这PARAM它与要被删除,像这样排除目录的名称的数组:

$path = $_SERVER['DOCUMENT_ROOT'].'/dev/images/norman/';

emptyDir($path); //will delete all under /norman/
emptyDir($path, array('8')); //will delete all under /norman/ except dir 8
emptyDir($path, array('8','10')); //will delete all under /norman/ except dir 8 and 10

function emptyDir($path,$exclude=false) { 

    // INITIALIZE THE DEBUG STRING
    $debugStr  = '';
    $debugStr .= "Deleting Contents Of: $path<br /><br />";
    if (!$exclude) {
       $exclude = array();
    }

    // PARSE THE FOLDER
    if ($handle = opendir($path)) {

        while (false !== ($file = readdir($handle))) {

            if ($file != "." && $file != "..") {

                // IF IT"S A FILE THEN DELETE IT
                if(is_file($path."/".$file)) {

                    if(unlink($path."/".$file)) {
                    $debugStr .= "Deleted File: ".$file."<br />";   
                    }

                } else if (!in_array($file, $exclude)) {

                    // IT IS A DIRECTORY
                    // CRAWL THROUGH THE DIRECTORY AND DELETE IT'S CONTENTS

                    if($handle2 = opendir($path."/".$file)) {

                        while (false !== ($file2 = readdir($handle2))) {

                            if ($file2 != "." && $file2 != "..") {
                                if(unlink($path."/".$file."/".$file2)) {
                                $debugStr .= "Deleted File: $file/$file2<br />";    
                                }
                            }

                        }

                    }

                    if(rmdir($path."/".$file)) {
                    $debugStr .= "Directory: ".$file."<br />";  
                    }

                }

            }

        }

    }
    echo $debugStr;
}


Answer 4:

您可以使用系统命令前。 exec("rm -rf {$dirPath}"); 或者,如果你想通过PHP来做到这一点,你必须去递归循环不会做是正确的。

public function deleteDir($path) {

    if ($handle = opendir($path)) {

        while (false !== ($file = readdir($handle))) {

            if ($file != "." && $file != "..") {

                // IF IT"S A FILE THEN DELETE IT
                if(is_file($path."/".$file)) {

                    if(unlink($path."/".$file)) {
                        $debugStr .= "Deleted File: ".$file."<br />";
                    }

                } else {
                    deleteDir($path."/".$file."/");
                    rmdir($path."/".$file);
                }
            }
        }
    }
}

当我使用下面的代码,怎么可能做到这一点? 使用是:/ dev /图片/诺曼/ 8 - >不会删除文件夹8使用是:/ dev /图片/诺曼/ - >将删除所有文件夹

我觉得你的问题是,你错过了“/”在“的/ dev /图片/诺曼/ 8”结尾



Answer 5:

$path='./ggg';
rrmdir($path);
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);
}
}


文章来源: php deleting a specific folder and all its contents