如何使用PHP删除空文件夹

时间:2009-09-17 06:31:19

标签: php

<?php 
function rmdirr($dirname){
    // Sanity check
    $dirname = "TEST/";
    if (!file_exists($dirname)) {
        return false;
    }

    // Simple delete for a file
    if (is_file($dirname)) {
        return unlink($dirname);
    }

    // Loop through the folder
    $dir = dir($dirname);
    while (false !== $entry = $dir->read()) {
        // Skip pointers
        if ($entry == "." || $entry == "..") {
            continue;
        }

        // Recurse
        unlink("$dirname/$entry");
    }

    // Clean up
    $dir->close();
    return rmdir($dirname);
}
if (rmdirr($_GET['map'])){
    echo "TEST FERo";
}
else{
    echo "something went wrong.";
}
?>

它运作良好,良好。但是,如果我需要删除包含一些文件和空文件夹的文件夹。在这种情况下,它删除所有文件,但不删除空文件夹。它会抛出一个例外......

Warning: unlink(TEST//New Folder) [function.unlink]: Permission denied 
  in E:\Xampp\xampp\htdocs\delete_FILE\delete_FILE.php on line 23

Warning: rmdir(TEST/) [function.rmdir]: Directory not empty in
  E:\Xampp\xampp\htdocs\delete_FILE\delete_FILE.php on line 28

删除该文件夹的可能方法是空的。

3 个答案:

答案 0 :(得分:4)

只需在while循环中递归使用rmdirr函数,而不是取消链接;

function rmdirr($dirname){ 
  // Sanity check 
  if (!file_exists($dirname)) { return false; }

  // Simple delete for a file 
  if (is_file($dirname)) { return unlink($dirname); }

  // Loop through the folder 
  $dir = dir($dirname); 
  while (false !== $entry = $dir->read()) { 
    // Skip pointers 
    if ($entry == "." || $entry == "..") { continue; }

    // Recurse
    rmdirr("$dirname/$entry"); 

  }

  // Clean up 
  $dir->close(); 
  return rmdir($dirname); 
} 

这样它也会处理非空的子文件夹...

答案 1 :(得分:1)

您必须确保您的网络服务器能够删除这些文件。检查权限。

答案 2 :(得分:0)

您只删除1级文件。您的代码尝试使用TEST//New Folder而不是unlink删除文件夹rmdir。您必须检查它是否是文件夹,然后rmdirunlink