2024 年日本 PHP 研討會

glob

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

glob尋找符合模式的路徑名稱

說明

glob(字串 $pattern, 整數 $flags = 0): 陣列|false

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

注意事項

注意此函式不適用於遠端檔案,因為要檢查的檔案必須可透過伺服器的檔案系統存取。

注意此函式在某些系統上不可用(例如舊的 Sun OS)。

另請參閱

新增註釋

使用者貢獻的註釋 1 則註釋

匿名
3 年前
使用 .[!.]* 包含點檔案(.dotfiles),但不包含 . 和 .. 特殊目錄。

<?php
$all_files
= array_merge(glob('.[!.]*'), glob('*'));
// 或
$all_files = glob('{.[!.],}*', GLOB_BRACE);
?>
To Top