在PHP

时间:2015-11-06 13:14:11

标签: php directory

以下代码成功删除了子目录及其中的文件。

但是它也删除了目录上面指定为$ 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);
    }

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);
}

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