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() | opendir/readdir |
|---|---|---|
| 程式碼行數 | 極少(1-3 行) | 需開啟/讀取/關閉/判斷迴圈 |
| 模式匹配 | 內建通配符 | 需自行 fnmatch/preg_match |
| 回傳格式 | 直接陣列 | 需自行收集 |
| 遞迴遍歷 | 支援有限 | 靈活(自行遞迴) |
| 效能 | 中等(大量檔案較慢) | 略快(串流式) |
| 記憶體 | 一次載入所有路徑 | 逐個處理可控 |
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/path'));
foreach ($it as $file) {
if ($file->isFile() && $file->getExtension() === 'php') {
echo $file->getPathname() . '<br>';
}
}
RegexIterator 做複雜模式匹配。GLOB_MARK:目錄名加尾斜線 /。GLOB_NOSORT:不排序,提升速度。GLOB_BRACE:支援 {a,b,c} 多模式。GLOB_ONLYDIR:僅回傳目錄。GLOB_ERR:讀取錯誤時停止(預設忽略錯誤)。簡單非遞迴、檔案數<萬級:glob() 最簡潔。
遞迴、大量檔案、需精細控制:RecursiveDirectoryIterator 更專業。