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

PHP 遞歸刪除目錄及文件的兩種實用函數

     編輯:PHP 綜合知識

函數一:刪除目錄連同所有內容

適用於需要徹底清理某目錄(含子目錄與文件)的場景。

/**
 * 遞歸刪除目錄及其所有內容
 * @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) 防止腳本超時。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved