glob()
是PHP中一個超好用卻意外冷門的函式,趁著有這個機會,我把glob大概說明一下,並整理一些常用的使用方法。
/** * 在使用之前,我們先大致了解一下glob有什麼特別的參數可以使用。 * * GLOB_MARK - 若檔案為資料夾,在回傳檔案路徑的最後面加上斜線"\" * GLOB_NOSORT - 保持檔案路徑在原資料夾的出現順序(不重新排序)。※筆者在Win環境看不出差異 * GLOB_NOCHECK - 若找不到匹配的檔案路徑,回傳匹配的條件字串 * GLOB_NOESCAPE - 不要將反斜線視為跳脫字元(※筆者在Win環境下看不出差異) * GLOB_BRACE - 將 {a,b,c} 視為搜尋 'a', 'b', 或 'c' * GLOB_ONLYDIR - 只列出資料夾路徑 * GLOB_ERR - 發生讀取錯誤時停止動作(像是無法讀取的資料夾),預設是「忽略錯誤」 **/
// 搜尋 path 資料夾中,所以資料夾的路徑,並在最後加上斜線 "\" $dirs = array_filter(glob('/path/*',GLOB_MARK), 'is_dir'); // 同上的結果(所以資料夾的路徑),而且此方法比較標準效能也較快 // (※不同這邊要注意的是,GLOB_ONLYDIR 僅適用於非使用 GUN C library 的系統 // 所以當不支援的時候,可以改用第一種方法) $dirs = glob('/path/*',GLOB_ONLYDIR | GLOB_MARK); // 搜尋path資料夾中,所有的檔案的路徑 // (※筆者很好奇,=3=既然都有 GLOB_ONLYDIR 了,為什麼不多個 GLOB_ONLYFILE ) $files = array_filter(glob('/path/*'), 'is_file'); // 搜尋 path 資料夾中所有檔名字串結尾為 .gif、.jpg、.png 檔案路徑 //(※這邊要注意,若副檔名大小寫不一樣,會搜尋不到,像 .GIF 、 .gIf 或 .giF 都會被忽略掉) $images = glob("/path/{*.gif,*.jpg,*.png}", GLOB_BRACE); // 搜尋 path 資料夾中所有檔名字串結尾非 "_s.jpg" 檔案路徑 $filter = array_filter(glob('img/*'), function($ele){return !stristr($ele,'_s.jpg');}); // 搜尋 path 中所有含有 views 資料夾的資料夾 $dirs = glob('/path/*/views', GLOB_ONLYDIR); //以遞迴的方式,取得深層資料夾的所有路徑 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; }
全站熱搜
留言列表