close

轉自 https://coder.tw/?p=690

--

有時候會需要寫PHP程式去取得指定資料夾內的檔案列表,例如在做網路硬碟程式時舊需要這種功能,這裡要跟大家介紹三個函式都可以做到這種功能,只是使用上不太一樣,這三個函式分別是glob、scandir、readdir

 

P.S.感謝網友蒼時弦也、白目捷的指正:)

一、glob

我個人比較推薦glob,他可以使用含有「萬用字元」的字串當做參數,取得檔案列表,例如./temp裡面有五個txt檔案、十個jpg檔,現在我只要取得jpg的檔案列表,那就寫成:glob(‘./temp/*.jpg’);,然後就會回傳Array,裡面就是jpg的檔案列表,如果要取得所有檔案,則語法為:glob(./temp/*.*);

格式:glob($pattern);

$pattern算是一個…. 你可以把它直接理解成資料夾路徑,然後可以使用萬用字元的意思,就像上面解釋的一樣

範例:

glob('./temp/*.txt');     //只會取得txt附檔名的檔案
glob('./temp/*.jpg');     //只會取得jpg附檔名的檔案

另外glob的第二個參數可以指定陣列的排序方法,相關介紹可以到官網查詢:http://php.net/manual/en/function.glob.php

二、scandir

scandir也算是蠻好用的一個函式,他的回傳值也一樣是Array,回傳值的第一項是「.」,就是目前資料夾的意思,第二項是「..」也就是上一個資料夾,但是他沒辦法像glob那樣指定到檔案格式,scandir的格式是:

scandir($dir_address);

範例:

scandir('./temp');
/*
會取得所有./temp下的資料,包括10個jpg以及5個txt
*/

三、readdir

readdir這個函式讓我一度有錯覺懷疑他根本沒有出現的必要,他的使用很麻煩,功能又不像glob那麼強大,要使用他必須要先開啟資料夾(opendir),然後把檔案代碼傳到readdir才可以使用,用完之後還要closedir,除了這點比較麻煩以外,他的回傳值是String,執行一次讀取一次,也就是他執行時會取得第一項檔案的資料,在執行第二次會取得第二筆資料,運作上跟mysql_fetch_row一樣,除此之外他的回傳值格式跟scandir一樣,第一個是「.」,第二個是「..」

官方文件:http://php.net/manual/en/function.readdir.php

範例:

$handle=opendir('C:UserslinroexDropboxmusic');
while(false!==($file=readdir($handle))){
	echo $file . '';
}

closedir($handle);

--

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 dizzy03 的頭像
    dizzy03

    碎碎念

    dizzy03 發表在 痞客邦 留言(0) 人氣()