简体   繁体   中英

Unlinking files and directories in PHP

The following code successfully removes sub directories and the files within them.

However it also removes all files in the directory above what is specified as $dir. This is not desired.

Can anybody see what is wrong with the code?

    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);
    }

As marked in the comments you should check for '..' as a possible file/directory and omit it. Additionally, check for errors without the '@'-sign.

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);
}

This will show you what is being deleted

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);
}

HINT: check for . or .. folders and ignore them

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM