適用於需要徹底清理某目錄(含子目錄與文件)的場景。
/**
* 遞歸刪除目錄及其所有內容
* @param string $dirName 目標目錄路徑
* @return void
*/
function delDirAndFile($dirName) {
if (!is_dir($dirName)) return;
$handle = opendir($dirName);
while (($item = readdir($handle)) !== false) {
if ($item === '.' || $item === '..') continue;
$path = $dirName . DIRECTORY_SEPARATOR . $item;
if (is_dir($path)) {
delDirAndFile($path); // 遞歸刪除子目錄
} else {
unlink($path); // 刪除文件
echo "已刪除文件:$path\n";
}
}
closedir($handle);
rmdir($dirName); // 刪除空目錄
echo "已刪除目錄:$dirName\n";
}
適用於清理緩存、上傳目錄等需保留資料夾本身的場景。
/**
* 遞歸刪除目錄下所有文件,不刪除目錄本身
* @param string $dirName 目標目錄路徑
* @return void
*/
function delFileUnderDir($dirName) {
if (!is_dir($dirName)) return;
$handle = opendir($dirName);
while (($item = readdir($handle)) !== false) {
if ($item === '.' || $item === '..') continue;
$path = $dirName . DIRECTORY_SEPARATOR . $item;
if (is_dir($path)) {
delFileUnderDir($path); // 遞歸處理子目錄
} else {
unlink($path);
echo "已刪除文件:$path\n";
}
}
closedir($handle);
}
// 完全刪除 upload 目錄及其所有內容
delDirAndFile('upload');
// 僅清空 upload 目錄下的文件,保留 upload 資料夾
delFileUnderDir('upload');
DIRECTORY_SEPARATOR 替代硬編碼 /,增強跨平台相容性。echo 或改為日誌記錄。set_time_limit(0) 防止腳本超時。