使用 .[!.]* 包含點檔案(.dotfiles),但不包含 . 和 .. 特殊目錄。
<?php
$all_files = array_merge(glob('.[!.]*'), glob('*'));
// 或
$all_files = glob('{.[!.],}*', GLOB_BRACE);
?>
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
glob — 尋找符合模式的路徑名稱
glob() 函式會根據 libc glob() 函式使用的規則搜尋所有符合 pattern
的路徑名稱,這與一般 shell 使用的規則類似。
在 Unix 系統和 macOS 上的行為取決於系統 glob() 的實作。在 Windows 上,使用符合 POSIX 1003.2 glob() 定義的實作,並包含一個擴充功能來處理 [!...]
否定範圍的慣例。
pattern(模式)
模式。不執行波浪號展開或參數替換。
特殊字元
*
- 匹配零個或多個字元。
?
- 匹配恰好一個字元(任何字元)。
[...]
- 匹配一組字元中的一個字元。如果第一個字元是 !
,則匹配不在該組中的任何字元。
\
- 跳脫後面的字元,除非使用 GLOB_NOESCAPE
旗標。
flags(旗標)
任何 GLOB_*
常數。
傳回一個包含匹配檔案/目錄的陣列,如果沒有檔案匹配則傳回空陣列,或在發生錯誤時傳回 false
。除非使用了 GLOB_NOSORT
,否則名稱將按字母數字順序排序。
範例 #1 glob() 如何方便地取代 opendir() 等函式。
<?php
foreach (glob("*.txt") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
?>
上述範例將輸出類似以下的內容
funclist.txt size 44686 funcsummary.txt size 267625 quickref.txt size 137820
範例 #2 使用更複雜模式的範例
<?php
foreach (glob("path/*/*.{txt,md}", \GLOB_BRACE) as $filename) {
echo "$filename\n";
}
?>
上述範例將輸出類似以下的內容
path/docs/mailinglist-rules.md path/docs/README.md path/docs/release-process.md path/pear/install-pear.txt path/Zend/README.md