2015-11-06 91 views
1

以下代碼成功刪除子目錄及其中的文件。取消鏈接PHP中的文件和目錄

但是它也會刪除指定爲$ dir的目錄中的所有文件。這是不希望的。

任何人都可以看到代碼有什麼問題嗎?

private function unlinkPubDirectory() 
    { 
     $dir = DIR_DOWNLOAD_PUB; 
     $h1 = opendir($dir); 
     while ($subdir = readdir($h1)) { 
      $h2 = opendir($dir . $subdir); 
      while ($file = readdir($h2)) { 
       @unlink($dir . $subdir . '/' . $file); 
      } 
      closedir($h2); 
      @rmdir($dir . $subdir); 
     } 
     closedir($h1); 
    } 
+0

使用'@'你只是壓制錯誤,沒有別的。注意:這不會回答問題 –

+0

首先刪除您的@然後您將能夠看到有什麼問題... – Nirnae

回答

1

標示的意見,你應該檢查「..」作爲一個可能的文件/目錄,並忽略它。此外,請檢查沒有'@'符號的錯誤。

private function unlinkPubDirectory() 
{ 
    $dir = DIR_DOWNLOAD_PUB; 
    $h1 = opendir($dir); 
    while ($subdir = readdir($h1)) { 
     if ($subdir == '..') continue; // don't do anything with '..' 
     $h2 = opendir($dir . $subdir); 
     while ($file = readdir($h2)) { 
      unlink($dir . $subdir . '/' . $file); 
     } 
     closedir($h2); 
     rmdir($dir . $subdir); 
    } 
    closedir($h1); 
} 
+0

這是正確的答案,謝謝。 – Billy

+0

很高興解決。 – Jan

0

這會告訴你什麼是被刪除

while ($subdir = readdir($h1)) { 
    $h2 = opendir($dir . $subdir); 
    while ($file = readdir($h2)) { 
     echo "<p>will remove file " . ($dir . $subdir . '/' . $file); 
     } 
    closedir($h2); 
    echo "<p>will remove dir " . ($dir . $subdir); 
} 

提示:檢查。或..文件夾,並忽略他們

相關問題