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

PHP glob() 函數遍歷目錄/檔案:比 opendir/readdir 更簡潔高效

     編輯:PHP 綜合知識

glob() 基本語法

array glob ( string $pattern [, int $flags = 0 ] )

回傳符合模式的檔案/目錄路徑陣列,失敗回傳 false。

常用模式範例

// 當前目錄所有檔案(含副檔名)
$files = glob('*.*');

// 指定目錄所有項目(含子目錄)
$all = glob('images/*');

// 指定目錄僅 .jpg
$jpgs = glob('images/*.jpg');

// 遞迴所有子目錄(需 PHP 5.5+ GLOB_BRACE)
$recursive = glob('**/*.php', GLOB_BRACE); // 注意:** 需支援,否則用 RecursiveDirectoryIterator

完整遍歷輸出範例

$list = glob('*'); // 當前目錄所有
foreach ($list as $item) {
    echo $item . '<br>';
}

$list2 = glob('images/*');
foreach ($list2 as $item) {
    echo $item . '<br>';
}

glob() vs opendir/readdir 對比

維度glob()opendir/readdir
程式碼行數極少(1-3 行)需開啟/讀取/關閉/判斷迴圈
模式匹配內建通配符需自行 fnmatch/preg_match
回傳格式直接陣列需自行收集
遞迴遍歷支援有限靈活(自行遞迴)
效能中等(大量檔案較慢)略快(串流式)
記憶體一次載入所有路徑逐個處理可控

大量檔案/遞迴場景建議改用 SPL

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/path'));
foreach ($it as $file) {
    if ($file->isFile() && $file->getExtension() === 'php') {
        echo $file->getPathname() . '<br>';
    }
}
  • 記憶體友善(Iterator 逐個產生)。
  • 支援過濾、深度控制、權限檢查。
  • 可搭配 RegexIterator 做複雜模式匹配。

常見旗標

  • GLOB_MARK:目錄名加尾斜線 /。
  • GLOB_NOSORT:不排序,提升速度。
  • GLOB_BRACE:支援 {a,b,c} 多模式。
  • GLOB_ONLYDIR:僅回傳目錄。
  • GLOB_ERR:讀取錯誤時停止(預設忽略錯誤)。

結論

簡單非遞迴、檔案數<萬級:glob() 最簡潔。
遞迴、大量檔案、需精細控制:RecursiveDirectoryIterator 更專業。

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