PHP中的目錄遍歷

2021-08-26 11:26:55 字數 3204 閱讀 3271

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

函式 返回型別 描述

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"就可以了,這下子簡單多了。舉個常見的例子,比如我們的**下有個資料夾叫wall*****,下面的每個目錄是 wall*****的分類,而每乙個分類下又包含兩目錄,origin(正常大小的),和thumb(縮圖),我們需要一段**來讀取所有分類的所有縮 略圖,如果不是用glob將是很麻煩的一段**,用glob的話,**就是下面的樣子了:

foreach(glob("wall*****/*/thumb/*") as $filename)

glob第二個引數的含義:

glob_mark 為每乙個目錄新增乙個反斜槓

glob_nosort 結果不經過排序

glob_nocheck 如果沒有匹配的結果,則返回模板本身

glob_nospace backslashes do not quote metacharacters

glob_brace 分解為a,b,c並分別匹配(重要)

glob_onlydir 僅返回目錄

glob_err stop on read errors (like unreadable directories), by default errors are ignored.

如果我們要查詢的檔案的話可以這樣寫

foreach(glob("d:/wamp/", glob_brace) as $filename)

下面的**是對getfilefrom()函式的改寫,**簡單很多,難點變成了對$exts引數的解析。

以上是對目錄遍歷的乙個簡單總結,算是個人的學習筆記了,如果也能對大家有所幫助,我很高興。

[ 此帖被lksjy在2010-05-29 08:29重新編輯 ]

php 禁止遍歷目錄,php無限遍歷目錄

以上就介紹了php無限遍歷目錄,包括了方面的內容,希望對php教程有興趣的朋友有所幫助。用的函式有 isset 判斷某個變數是否定義chdir 將當前目錄改變為指定的目錄。opendir 開啟目錄。readdir 讀取目錄。getcwd 獲取當前目錄。還用到了for if get傳值 大概就這些東東...

php遍歷指定目錄中的內容2

輸出檔案是否可讀寫,可執行,並同時輸出建立時間,修改時間,訪問時間 2.遍歷指定目錄中的內容 if arr file round函式對浮點數進行四捨五入 size round size,2 arrbyte i readresult is readable path.val 可讀 不可讀 writer...

PHP遍歷目錄和檔案列表

php view plain copy define ds directory separator class getdirfile closedir handle else return dirarray 獲取檔案列表 public function getfile dir closedir ha...