萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> PHP中的目錄遍歷細說教程

PHP中的目錄遍歷細說教程

class="area">  

HP學習教程文章簡介: Php中的目錄遍歷細說教程 在編寫php應用的過程當中,對指定目錄的遍歷、文件的篩選是在所難免也是至關重要 的,PHP本身提供了解析和讀取目錄的強大方法。牢牢掌握這些方法是每一個phper所

 

Php中的目錄遍歷細說教程

在編寫php應用的過程當中,對指定目錄的遍歷、文件的篩選是在所難免也是至關重要 的,PHP本身提供了解析和讀取目錄的強大方法。牢牢掌握這些方法是每一個phper所必須的。本文將對幾個重要方法總結和歸納,筆者經驗尚淺,如有錯誤 和疏漏希望網友們加以指正,以期共同進步。


函數                               返回類型                                      描述
opendir                          資源句柄                      得到指定目錄的資源句柄
is_dir                              布爾                              判斷是否為目錄
is_readable                  布爾                                  給定目錄是否可讀
readdir                       字符串                              通過資源句柄中讀一個文件的文件名,指針後移,如果不存 在或者已在最後的話在返回false
closedir                          void                                  關閉資源句柄,釋放資源
scandir                           數組                             返回指定目錄下所有的文件和目錄組成的數組



遍歷指定文件夾中的文件



該段代碼完成對指定目錄中文件與目錄的的基本遍歷,其中readdir 函數讀取給定目錄資源句柄$handle裡的文件並將指針後移,如果已經達到最後一個文件的話,則返回false。另外"."代表本層目錄".."代表上層目錄也會被列出,在大多數情況下我們需要把他們過濾掉。                    



遍歷指定文件夾下指定類型的文件
                
多數情況下,我們對目錄的遍歷往往要受限於某些條件,例如,我們只要遍歷出指定目錄下的圖像文件或者所有的xml文件。為滿足上面的要求,我們重寫代碼,並且把代碼封裝到一個函數裡。該函數能過濾掉"."和".."和目錄,並根具參數返回指定的擴展名的文件。





以上函數,可以獲得指定目錄下指定類型的文件。如果我們想獲得mypics下的所有jpeg和png的文件的話調用該函數:                

$temp = getFileFrom("./mypics",array('jpeg','png'));

目錄樹的遞歸遍歷
  我想在php中最實用的遞歸函數就是對目錄的遞歸遍歷了,下面的函數可以獲得指定目錄的完整結構。同時用scandir代替了opendir來簡化代碼。                





神奇的glob
 glob是php4.3.0後加入的十分強大的函數,可惜官方手冊上的介紹並不詳細。該函數定義如下:                

array glob ( string $pattern [, int $flags = 0 ] )

 glob有兩個參數 $pattern 與 可選的 $flag。$pattern 在字面是模板而不是單純的指定目錄的字符串, $flag 是一些常量參數,用來改變glob的行為。                

通過實踐來學習他的用法。我們的code1是用來遍歷一個目錄下所有文件的代碼,如果用glob寫的話可以這樣。                






我 們可以看到區別,首先glob要簡單的多,其次glob的第一個參數,"d:/wamp/*"告訴glob要查找的文件是"d:/wamp"目錄下的所有 文件,由此可見$pattern更像是操作系統的通配符。而且返回的內容中已經過濾掉了'.'和'..',如果我們要找到所有的bmp文件只要把參數寫 成"d:/wamp/*.bmp"就可以了,這下子簡單多了。舉個常見的例子,比如我們的網站下有個文件夾叫wallpaper,下面的每個目錄是 wallpaper的分類,而每一個分類下又包含兩目錄,origin(正常大小的),和thumb(縮略圖),我們需要一段代碼來讀取所有分類的所有縮 略圖,如果不是用glob將是很麻煩的一段代碼,用glob的話,代碼就是下面的樣子了:                    


foreach(glob("wallpaper/*/thumb/*") as $fileName){
        ehco $fileName;
}


 glob第二個參數的含義:                    

GLOB_MARK                             為每一個目錄添加一個反斜槓
GLOB_NOSORT                      結果不經過排序
GLOB_NOCHECK                  如果沒有匹配的結果,則返回模板本身
GLOB_NOSPACE                   Backslashes do not quote metacharacters
GLOB_BRACE                        {a,b,c}分解為a,b,c並分別匹配(重要)
GLOB_ONLYDIR                     僅返回目錄
GLOB_ERR                            Stop on read errors (like unreadable directories), by default errors are ignored.



如果我們要查找圖片的文件的話可以這樣寫                    

foreach(glob("d:/wamp/{*.jpeg,*.jpg,*.gif}", GLOB_BRACE) as $filename){
  &nb

copyright © 萬盛學電腦網 all rights reserved