一、序言
在写上一篇博客的时候,需要用到目录树结构来展示我的文件结构,于是乎吃力不讨好的把所有文件夹和文件都手动的”遍历“了一边。后来我就想,这样太容易出错了,而且很费力气,于是就想着写个php脚本来遍历一个目录下面的文件及文件夹,并生成目录树,方便以后再有需要用到目录树结构的地方,直接运行就行了。目前脚本生成的目录树结构可以直接通过浏览器查看,也可以下载生成txt文件。
二、思路介绍
生成目录树的思路很简单,遍历当前文件夹下面的内容,碰到”.“和”..“直接跳过,碰到文件夹则递归调用,碰到文件则先保存到数组中,等当前文件夹遍历完之后吧数组中的文件拼接起来,这个操作就是生成目录树了,生成之后还有一步操作,显示或者下载目录树。书写的过程中还有一些细节问题,这个要等到开发的时候才会有。为了好理解,好扩展,我将本来一个函数可以完成的事放入一个类中,让遍历文件夹的思路更加清晰。
三、代码实现
思路有了,写起代码来就如鱼得水(这也是一般为什么厉害的人告诉我们他写代码的时候甚至有超过一般的时间在思考,而不是立马动手写代码),好了看看部分代码:
3.1 生成目录树


<span> 1</span> <span>/*</span><span>* </span><span> 2</span> <span> * 生成目录树 </span><span> 3</span> <span>*/</span> <span> 4</span> <span>public</span> <span>function</span> createTree(<span>$path</span>, <span>$level</span>=0<span>){ </span><span> 5</span> <span>$level</span> = <span>$level</span><span>; </span><span> 6</span> <span>$this</span>->tree .= <span>str_repeat</span>(<span>$this</span>->options["padding"], <span>$level</span><span>) </span><span> 7</span> .<span>$this</span>->options["dirpre"<span>] </span><span> 8</span> .<span>$this</span>->_basename(<span>$path</span><span>) </span><span> 9</span> .<span>$this</span>->options["newline"<span>]; </span><span>10</span> <span>$level</span>++<span>; </span><span>11</span> <span>$dirHandle</span> = <span>opendir</span>(<span>$path</span><span>); </span><span>12</span> <span>$files</span> = <span>array</span><span>(); </span><span>13</span> <span>while</span> (<span>false</span> !== (<span>$dir</span> = <span>readdir</span>(<span>$dirHandle</span><span>))) { </span><span>14</span> <span>if</span>(<span>$dir</span> == "." || <span>$dir</span> == ".."<span>){ </span><span>15</span> <span>continue</span><span>; </span><span>16</span> <span> } </span><span>17</span> <span>if</span>(!<span>$this</span>->options["showHide"] && <span>substr</span>(<span>$dir</span>, 0, 1) == "."<span>){ </span><span>18</span> <span>continue</span><span>; </span><span>19</span> <span> } </span><span>20</span> <span>$dir</span> = <span>$path</span>.DIRECTORY_SEPARATOR.<span>$dir</span><span>; </span><span>21</span> <span>if</span>(<span>is_dir</span>(<span>$dir</span><span>)){ </span><span>22</span> <span>$this</span>->createTree(<span>$dir</span>, <span>$level</span><span>); </span><span>23</span> } <span>elseif</span> (<span>is_file</span>(<span>$dir</span><span>)){ </span><span>24</span> <span>array_push</span>(<span>$files</span>, <span>$dir</span><span>); </span><span>25</span> <span> } </span><span>26</span> <span> } </span><span>27</span> <span>closedir</span>(<span>$dirHandle</span><span>); </span><span>28</span> <span>foreach</span> (<span>$files</span> <span>as</span> <span>$key</span> => <span>$value</span><span>) { </span><span>29</span> <span>$this</span>->tree .= <span>str_repeat</span>(<span>$this</span>->options["padding"], <span>$level</span><span>) </span><span>30</span> .<span>$this</span>->options["filepre"<span>] </span><span>31</span> .<span>$this</span>->_basename(<span>$value</span><span>) </span><span>32</span> .<span>$this</span>->options["newline"<span>]; </span><span>33</span> <span> } </span><span>34</span> <span>return</span> <span>$this</span><span>; </span><span>35</span> }View Code
3.2 显示目录树


<span>1</span> <span>/*</span><span>* </span><span>2</span> <span> * 显示目录树 </span><span>3</span> <span>*/</span> <span>4</span> <span>public</span> <span>function</span><span> showTree(){ </span><span>5</span> <span>echo</span> "<pre class="brush:php;toolbar:false">" <span>6</span> .<span>$this</span>-><span>tree </span><span>7</span> .""; 8 } View Code
3.3 下载目录树


<span>1</span> <span>/*</span><span>* </span><span>2</span> <span> * 下载目录树文件 </span><span>3</span> <span>*/</span> <span>4</span> <span>public</span> <span>function</span> downloadTree(<span>$name</span><span>){ </span><span>5</span> <span>header</span>("Content-type:text/plain"<span>); </span><span>6</span> <span>header</span>("Content-Disposition:attachment;filename={<span>$name</span>}.txt"<span>); </span><span>7</span> <span>echo</span> <span>$this</span>-><span>tree; </span><span>8</span> }View Code
3.4 试验下
用下面的两端代码分别测试下:


<span>1</span> <span>$t</span> = <span>new</span> Dirtree(<span>array</span>("padding"=>" ","newline"=>"<br>"<span>)); </span><span>2</span> <span>$t</span>->createTree("D:\autoload")->showTree("tree");View Code
上面这段代码会将目录结构信息输出到浏览器,就像图1那样:
图 1 输出目录结构到浏览器 图 2 下载目录树结构


<span>1</span> <span>$t</span> = <span>new</span> Dirtree(<span>array</span>("padding"=>" ","newline"=>"\r\n"<span>)); </span><span>2</span> <span>$t</span>->createTree("D:\autoload")->downloadTree("tree");View Code
上面的代码执行后,浏览器会下载一个tree.txt文件,打开文件的信息如图2所示
四、 总结
一个生成目录树功能基本完成了,但是这个要是有时间的话还可以在扩展扩展,让他更友好的支持命令行模式。或者对输出的内容做做强化,让文件夹可以折叠(js实现)。
本文版权归作者iforever(luluyrt@163.com)所有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
以上就介绍了遍历生成目录树,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP和Python都是高层次的编程语言,广泛应用于Web开发、数据处理和自动化任务。1.PHP常用于构建动态网站和内容管理系统,而Python常用于构建Web框架和数据科学。2.PHP使用echo输出内容,Python使用print。3.两者都支持面向对象编程,但语法和关键字不同。4.PHP支持弱类型转换,Python则更严格。5.PHP性能优化包括使用OPcache和异步编程,Python则使用cProfile和异步编程。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3汉化版
中文版,非常好用

Dreamweaver Mac版
视觉化网页开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器