簡體   English   中英

在PHP中取消鏈接文件和目錄

[英]Unlinking files and directories in 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);
    }

如注釋中所標記,您應檢查“ ..”是否為可能的文件/目錄,並忽略它。 此外,檢查沒有'@'符號的錯誤。

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

這將向您顯示正在刪除的內容

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM