2017-07-03 176 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,你會沒事的。