遍歷生成目錄樹,生成目錄樹
一、序言
在寫上一篇博客的時候,需要用到目錄樹結構來展示我的文件結構,於是乎吃力不討好的把所有文件夾和文件都手動的”遍歷“了一邊。後來我就想,這樣太容易出錯了,而且很費力氣,於是就想著寫個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 "<pre>"
6 .$this->tree
7 ."</pre>";
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"=>"<br>"));
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([email protected])所有,未經作者本人同意禁止任何形式的轉載,轉載文章之後必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。