PHP 5.3.0

最近在維護程式碼的時候,發現有一段刪除目錄以下全部檔案的 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);
}

參考連結