2015-11-06 57 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); 
} 

提示:检查。或..文件夹,并忽略他们