使用 .[!.]* 包含點檔案(.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