首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 遞歸刪除目錄與文件、統計釋放空間完整實現

     編輯:PHP 綜合知識

功能概覽

  • 遞歸遍歷目錄,刪除所有文件與子目錄
  • 自動統計刪除文件總大小,顯示釋放空間(MB)
  • 支援中文路徑(iconv 轉碼),詳細成功/失敗日誌
  • 數組求和輔助函數處理多維大小數據

完整代碼

<?php
header('Content-Type: text/html; charset=utf-8');

function delFile($fpath) {
    $filesize = [];
    $filepath = iconv('gb2312', 'utf-8', $fpath); // 顯示用編碼轉換

    if (is_dir($fpath)) {
        if ($dh = opendir($fpath)) {
            while (($file = readdir($dh)) !== false) {
                if ($file != '.' && $file != '..') {
                    $filesize[] = delFile($fpath . '/' . $file);
                }
            }
            closedir($dh);
        }
        // 嘗試刪除空目錄
        $filesize['file'] = 0;
        if (@rmdir($fpath) === true) {
            echo "{$filepath}................刪除成功<br>\n";
        } else {
            echo "{$filepath}................刪除失敗<br>\n";
        }
    } else {
        if (is_file($fpath)) {
            $fsize = filesize($fpath);
            $filesize[] = $fsize;
            if (@unlink($fpath) === true) {
                echo "{$filepath}...{$fsize}K................刪除成功<br>\n";
            } else {
                echo "{$filepath}...{$fsize}K................刪除失敗<br>\n";
            }
        }
    }
    return $filesize;
}

function getArrSum(&$arr) {
    if (is_array($arr)) {
        foreach ($arr as &$value) {
            $value = getArrSum($value);
        }
        return array_sum($arr);
    }
    return $arr;
}

// 測試入口
$fpath = 'D:/test'; // 請改為實際路徑
$filesize = delFile($fpath);
$size = getArrSum($filesize);
printf('為您節省:%.3fM 空間', $size / (1024 * 1024));
?>

關鍵點解析

1. 遞歸刪除邏輯

目錄:先遞歸清空內容,再 rmdir();文件:直接 unlink()。@ 抑制警告,由返回值判斷成敗。

2. 編碼處理

Windows 下文件系統常為 GB2312,iconv() 轉 UTF-8 供頁面顯示,避免中文亂碼。

3. 多維數組求和

getArrSum() 遞歸展開嵌套數組,配合 array_sum() 獲取總位元組數。

4. 測試方法

在 D 槽建立 test 目錄並放入任意文件/子目錄,執行腳本即可見效果。

安全與效能提示

  1. 權限:執行腳本的用戶需擁有目標目錄的完全控制權限。
  2. 防誤刪:生產環境務必加入確認機制(如 token、IP 白名單、二次驗證)。
  3. 大目錄效能:海量文件時遞歸深度可能導致棧溢出,可改用迭代器(RecursiveDirectoryIterator)或分批處理。
  4. 錯誤處理:建議記錄失敗路徑至日誌,而非僅輸出 HTML。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved