遍曆組建目錄樹,組建目錄樹
一、序言
在寫上一篇部落格的時候,需要用到分類樹結構來展示我的檔案結構,於是乎吃力不討好的把所有檔案夾和檔案都手動的”遍曆“了一邊。後來我就想,這樣太容易出錯了,而且很費力氣,於是就想著寫個php指令碼來遍曆一個目錄下面的檔案及檔案夾,並組建目錄樹,方便以後再有需要用到分類樹結構的地方,直接運行就行了。目前指令碼產生的分類樹結構可以直接通過瀏覽器查看,也可以下載產生txt檔案。
二、思路介紹
組建目錄樹的思路很簡單,遍曆當前檔案夾下面的內容,碰到”.“和”..“直接跳過,碰到檔案夾則遞迴調用,碰到檔案則先儲存到數組中,等當前檔案夾遍曆完之後吧數組中的檔案拼接起來,這個操作就是組建目錄樹了,產生之後還有一步操作,顯示或者下載分類樹。書寫的過程中還有一些細節問題,這個要等到開發的時候才會有。為了好理解,好擴充,我將本來一個函數可以完成的事放入一個類中,讓遍曆檔案夾的思路更加清晰。
三、代碼實現
思路有了,寫起代碼來就如魚得水(這也是一般為什麼厲害的人告訴我們他寫代碼的時候甚至有超過一般的時間在思考,而不是立馬動手寫代碼),好了看看部分代碼:
3.1 組建目錄樹
1 /** 2 * 組建目錄樹 3 */ 4 public function createTree($path, $level=0){ 5 $level = $level; 6 $this->tree .= str_repeat($this->options["padding"], $level) 7 .$this->options["dirpre"] 8 .$this->_basename($path) 9 .$this->options["newline"];10 $level++;11 $dirHandle = opendir($path);12 $files = array();13 while (false !== ($dir = readdir($dirHandle))) {14 if($dir == "." || $dir == ".."){15 continue;16 }17 if(!$this->options["showHide"] && substr($dir, 0, 1) == "."){18 continue;19 }20 $dir = $path.DIRECTORY_SEPARATOR.$dir;21 if(is_dir($dir)){22 $this->createTree($dir, $level);23 } elseif (is_file($dir)){24 array_push($files, $dir);25 }26 }27 closedir($dirHandle);28 foreach ($files as $key => $value) {29 $this->tree .= str_repeat($this->options["padding"], $level)30 .$this->options["filepre"]31 .$this->_basename($value)32 .$this->options["newline"];33 }34 return $this;35 }View Code
3.2 顯示分類樹
1 /**2 * 顯示分類樹3 */4 public function showTree(){5 echo "
"6 .$this->tree7 ."
";8 }View Code
3.3 下載分類樹
1 /**2 * 下載分類樹檔案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 實驗下
用下面的兩端代碼分別測試下:
1 $t = new Dirtree(array("padding"=>" ","newline"=>"
"));2 $t->createTree("D:\autoload")->showTree("tree");View Code
上面這段代碼會將目錄結構資訊輸出到瀏覽器,就像圖1那樣:
1 $t = new Dirtree(array("padding"=>" ","newline"=>"\r\n"));2 $t->createTree("D:\autoload")->downloadTree("tree");View Code
上面的代碼執行後,瀏覽器會下載一個tree.txt檔案,開啟檔案的資訊2所示
四、 總結
一個組建目錄樹功能基本完成了,但是這個要是有時間的話還可以在擴充擴充,讓他更友好的支援命令列模式。或者對輸出的內容做做強化,讓檔案夾可以摺疊(js實現)。
本文著作權歸作者iforever(luluyrt@163.com)所有,未經作者本人同意禁止任何形式的轉載,轉載文章之後必須在文章頁面明顯位置給出作者和原文串連,否則保留追究法律責任的權利。
http://www.bkjia.com/PHPjc/937011.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/937011.htmlTechArticle遍曆組建目錄樹,組建目錄樹 一、序言 在寫上一篇部落格的時候,需要用到分類樹結構來展示我的檔案結構,於是乎吃力不討好的把所有文...