PHP 刪除目錄和以下檔案

最近在維護程式碼的時候,發現有一段刪除目錄以下全部檔案的 code。

@exec("rm -rf $dir");

讓我想到最近 GitLab 工程師最近誤刪資料庫的事件, 這種指令不能亂留在檔案裡面啊!

PHP rmdir 只能刪除空資料夾,unlink用刪除檔案,就找到了一種遞回刪除的方式。

方法

刪除目錄之前,先刪除所有檔案和目錄,每次判斷是檔案還是資料夾,是資料夾就遞迴執行。

#12 在執行同樣的 funciton deleteDir() 判斷

public static function deleteDir($dirPath)
{
    if (! is_dir($dirPath)) {
        throw new InvalidArgumentException("$dirPath must be a directory");
    }
    if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
        $dirPath .= '/';
    }
    $files = glob($dirPath . '*', GLOB_MARK);
    foreach ($files as $file) {
        if (is_dir($file)) {
            self::deleteDir($file); // recursion
        } else {
            unlink($file);
        }
    }
    rmdir($dirPath);
}

參考連結