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

PHP glob() 函數一行程式碼刪除目錄下所有檔案

     編輯:PHP 綜合知識

glob() 是 PHP 內建的檔案模式匹配函數,配合 array_map() 與 unlink(),可用極簡潔的程式碼批量刪除檔案。

一行刪除指令

array_map('unlink', glob('*'));

運作原理解析

  1. glob('*'):回傳當前目錄下所有檔案/目錄名稱陣列
  2. array_map('unlink', ...):對陣列每個元素執行 unlink() 刪除

glob() 完整參數說明

glob(string $pattern, int $flags = 0): array|false
旗標說明
GLOB_MARK目錄名稱加斜線 / 區分
GLOB_NOSORT不排序,依檔案系統原始順序(較快)
GLOB_NOCHECK無匹配時回傳模式字串而非空陣列
GLOB_NOESCAPE反斜線不轉義,字面匹配
GLOB_BRACE展開 {a,b,c} 為多模式
GLOB_ONLYDIR僅回傳目錄
GLOB_ERR遇錯誤(如不可讀目錄)停止並回傳 false

實用範例

刪除特定副檔名檔案

array_map('unlink', glob('*.log'));        // 刪除所有 .log
array_map('unlink', glob('*.{jpg,png,gif}', GLOB_BRACE)); // 多副檔名

遞迴刪除子目錄檔案

function rglob($pattern, $flags = 0) {
    $files = glob($pattern, $flags);
    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
        $files = array_merge($files, rglob($dir.'/'.basename($pattern), $flags));
    }
    return $files;
}
array_map('unlink', rglob('data/*'));

列出目錄結構

print_r(glob('*'));           // 所有檔案/目錄
print_r(glob('*.txt'));       // 所有 .txt
print_r(glob('*.*'));         // 所有有副檔名
print_r(glob('*/*.php', GLOB_BRACE)); // 子目錄下所有 .php

⚠️ 重要安全提醒

  • 謹慎使用:glob('*') 包含隱藏檔、目錄,unlink() 刪除目錄會失敗但可能造成非預期結果
  • 生產環境建議:明確指定模式(如 *.tmp、cache_*),避免誤刪
  • 權限檢查:確保 PHP 進程對目標檔案有寫入/刪除權限
  • 錯誤處理:array_map 不會拋出異常,失敗靜默,建議改用 foreach 含 @unlink 或檢查回傳值

更安全的寫法

foreach (glob('cache_*.tmp') as $file) {
    if (is_file($file) && !unlink($file)) {
        error_log("Failed to delete: $file");
    }
}

glob() 是檔案系統操作的利器,善用模式匹配與旗標,能以極少代碼完成複雜的批量檔案操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved