在寫上一篇博客的時(shí)候,需要用到目錄樹(shù)結(jié)構(gòu)來(lái)展示我的文件結(jié)構(gòu),于是乎吃力不討好的把所有文件夾和文件都手動(dòng)的”遍歷“了一邊。后來(lái)我就想,這樣太容易出錯(cuò)了,而且很費(fèi)力氣,于是就想著寫個(gè)php腳本來(lái)遍歷一個(gè)目錄下面的文件及文件夾,并生成目錄樹(shù),方便以后再有需要用到目錄樹(shù)結(jié)構(gòu)的地方,直接運(yùn)行就行了。目前腳本生成的目錄樹(shù)結(jié)構(gòu)可以直接通過(guò)瀏覽器查看,也可以下載生成txt文件。
二、思路介紹生成目錄樹(shù)的思路很簡(jiǎn)單,遍歷當(dāng)前文件夾下面的內(nèi)容,碰到”.“和”..“直接跳過(guò),碰到文件夾則遞歸調(diào)用,碰到文件則先保存到數(shù)組中,等當(dāng)前文件夾遍歷完之后吧數(shù)組中的文件拼接起來(lái),這個(gè)操作就是生成目錄樹(shù)了,生成之后還有一步操作,顯示或者下載目錄樹(shù)。書寫的過(guò)程中還有一些細(xì)節(jié)問(wèn)題,這個(gè)要等到開(kāi)發(fā)的時(shí)候才會(huì)有。為了好理解,好擴(kuò)展,我將本來(lái)一個(gè)函數(shù)可以完成的事放入一個(gè)類中,讓遍歷文件夾的思路更加清晰。
三、代碼實(shí)現(xiàn)思路有了,寫起代碼來(lái)就如魚得水(這也是一般為什么厲害的人告訴我們他寫代碼的時(shí)候甚至有超過(guò)一般的時(shí)間在思考,而不是立馬動(dòng)手寫代碼),好了看看部分代碼:
3.1 生成目錄樹(shù)
1 /** 2 * 生成目錄樹(shù) 3 */ 4 public function createTree($path, $level=0){ 5 $level = $level; 6 $this->tree .= str_repeat($this->options["padding"], $level) 7 .$this->options["dirView Code 3.2 顯示目錄樹(shù)
1 /**2 * 顯示目錄樹(shù)3 */4 public function showTree(){5 echo "<pre>"6 .$this->tree7 ."</pre>";8 }View Code 3.3 下載目錄樹(shù)
1 /**2 * 下載目錄樹(shù)文件3 */4 public function downloadTree($name){5 header("Content-type:text/plain");6 header("Content-Disposition:attachment;filename={$name}.txt");7 echo $this->tree;8 }View Code 3.4 試驗(yàn)下 用下面的兩端代碼分別測(cè)試下:

1 $t = new Dirtree(array("padding"=>" ","newline"=>"<br>"));2 $t->createTree("D:/autoload")->showTree("tree");View Code 上面這段代碼會(huì)將目錄結(jié)構(gòu)信息輸出到瀏覽器,就像圖1那樣:


圖 1 輸出目錄結(jié)構(gòu)到瀏覽器 圖 2 下載目錄樹(shù)結(jié)構(gòu)

1 $t = new Dirtree(array("padding"=>" ","newline"=>"/r/n"));2 $t->createTree("D:/autoload")->downloadTree("tree");View Code 上面的代碼執(zhí)行后,瀏覽器會(huì)下載一個(gè)tree.txt文件,打開(kāi)文件的信息如圖2所示
四、 總結(jié) 一個(gè)生成目錄樹(shù)功能基本完成了,但是這個(gè)要是有時(shí)間的話還可以在擴(kuò)展擴(kuò)展,讓他更友好的支持命令行模式。或者對(duì)輸出的內(nèi)容做做強(qiáng)化,讓文件夾可以折疊(js實(shí)現(xiàn))。
本文版權(quán)歸作者iforever(luluyrt@163.com)所有,未經(jīng)作者本人同意禁止任何形式的轉(zhuǎn)載,轉(zhuǎn)載文章之后必須在文章頁(yè)面明顯位置給出作者和原文連接,否則保留追究法律責(zé)任的權(quán)利。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注