採用PHP函數glob實現尋找與模式匹配的文件路徑

採用PHP函數glob實現尋找與模式匹配的文件路徑,主要討論glob()函數的作用和用法。

在開發過程中,有時候需要在目錄中匹配某一類文件和目錄,如後綴爲.txt或.ini等文件,如果採用普通方案如讀取目錄然後使用strpos()函數進行查詢,速度很慢(如果目錄下文件很多),而且匹配的策略也非常不靈活,glob()函數依照libc glob() 函數使用的規則尋找所有與pattern匹配的文件路徑,類似於一般shells所用的規則一樣,但不進行縮寫擴展或參數替代。採用glob()函數只需要實現一個匹配規則就可以獲取到所需要的文件和目錄。簡單來說glob()函數是一個獲取文件和目錄的函數。

一,函數原型
array glob ( string pattern [, int flags] )
注意:glob()函數獲取的是一個數組,其返回一個包含有匹配文件/目錄的數組。如果出錯返回FALSE

二,版本兼容
PHP 4 >= 4.3.0, PHP 5

三,函數的基礎用法與實例

1,匹配目錄下.txt後綴的文件

<?php 
foreach (glob("*.txt") as $filename) { 
    echo $filename; 
} 
?>

2,實現兼容大小寫匹配
<?php 
$pattern = sql_case("*.pdf"); 
var_dump(glob($pattern)); 
?>

類似如下
<?php 
foreach (array_merge(glob("*.pdf"),glob("*.PDF")) as $filename) { 
     echo "$filename \n"; 
} 
?>

3,獲取目錄下的所有子目錄
<?php 
function listdirs($dir) { 
   static $alldirs = array(); 
   $dirs = glob($dir . '/*', GLOB_ONLYDIR); 
   if (count($dirs) > 0) { 
       foreach ($dirs as $d) $alldirs[] = $d; 
   } 
   foreach ($dirs as $dir) listdirs($dir); 
   return $alldirs; 
} 
?>

4,匹配所有文件

<?php 
$files = glob('{,.}*', GLOB_BRACE); 
?>


四,注意事項
1,不能作用於遠程文件,被檢查的文件必須通過服務器的文件系統訪問。
2,使用 glob("[myfolder]/*.txt")將不能匹配,解決方法爲 glob("\[myfolder\]/*.txt"),注意[]字符應用。
3,其次是第二個參數flags有效標記說明
(1)GLOB_MARK - 在每個返回的項目中加一個斜線
(2)GLOB_NOSORT - 按照文件在目錄中出現的原始順序返回(不排序)
(3)GLOB_NOCHECK - 如果沒有文件匹配則返回用於搜索的模式
(4)GLOB_NOESCAPE - 反斜線不轉義元字符
(5)GLOB_BRACE - 擴充 {a,b,c} 來匹配 'a','b' 或 'c'
(6)GLOB_ONLYDIR - 僅返回與模式匹配的目錄項 注意: 在 PHP 4.3.3 版本之前 GLOB_ONLYDIR 在 Windows 或者其它不使用 GNU C 庫的系統上不可用。
(7)GLOB_ERR - 停止並讀取錯誤信息(比如說不可讀的目錄),默認的情況下忽略所有錯誤 注意: GLOB_ERR 是 PHP 5.1 添加的。

glob()函數的典型應用是讀取數據表文件,如獲取某個目錄下的.sql後綴文件,這種在單元測試中非常實用,可實現讀取sql文件重建數據庫等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章