2017-07-03 131 views
0

我打电话给我的一些其他网站的php功能,这些网站在后台删除我的服务器上的文件夹。无法删除文件夹中的最后一个文件,同时删除使用php的文件夹

这是我用来删除文件夹的功能。

public static function remove($dir) 
     { 
      if (is_dir($dir)) { 
       $diropen = opendir($dir); 
       while($d = readdir($diropen)) { 
        if ($d!= '.' && $d != '..') { 
         self::remove($dir . "/$d"); 
        } 
       } 
       @rmdir($dir); 
      } elseif (is_file($dir)) { 
       @unlink($dir); 
      } 
     } 

如果我有在文件夹中的三个文件则删除只有两个,无法删除最后一个文件或解除失败的最后一个文件。

如果我有两个文件,那么它只会删除一个文件。

我检查了使用is_writable的可写权限,对所有文件都是如此。

有人可以帮我一把。或者如何调试这个行为,因为这个函数在后台被调用。

+0

您的代码适用于我。 –

+0

阅读说明书。 http://php.net/manual/en/function.readdir.php“/ *这是错误的方式来循环目录。* /” – bassxzero

+0

@ChrysUgwu有没有办法调试解除链接错误,因为它不工作我的结局。 – EmptyData

回答

0

我的目录在一些其他功能中打开,所以我closedir我的文件夹,然后上面的功能工作正常。

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

?> 

使用closedir,你会没事的。