PHP5中增加了Iterator,一组有助于导航和处理等级数据结构的现成接口,这是PHP5最有趣的新特性之一。
这些Iterator显著减少了处理XML文档树或文件集合所需的代码。PHP5中使用大量Iterator,包括ArrayIterator、 CachingIterator、LimitIterator、RecursiveIterator、SimpleXMLIterator和 DirectoryIterator。
通过DirectoryIterator可以迅速有效地对目录中的文件进行处理。在编码过程中稍微增加一些创造力,DirectoryIterator还可用于递归处理嵌套式目录树。这两个任务只需使用几行代码就可以完成,比“标准”处理方法有了显著提高。
处理单级目录
首先我们从简单的任务着手:处理一个单级目录。输入(或复制)以下代码(列表A),修改目录路径以反映当地配置:
列表A
<?php
$it = new DirectoryIterator("/tmp/mystuff");
foreach($it as $file) {
if (!$it->isDot()) {
echo $file . "n";
}
}
?>
在浏览器中查看这段代码的输出结果,你会在指定目录中看到一个文件列表。这一切是如何发生的呢?DirectoryIterator提供一个预先确 定的接口来重述一个目录的内容;示例目标目录的位置后,就可以把它当作一个标准的PHP数组来处理,每个元素代表目录中的一个文件。注意它使用isDot ()方法分别过滤掉“.”和“..”目录。
处理嵌套式目录树
递归处理一个嵌套式目录树几乎同样简单。在这种情况下,DirectoryIterator需要检查它在单级目录中遇到的每一个对象,确定其是一个文件还是目录。如果是一个目录,就更深入一级检验下一级的内容。这听起来似乎相当复杂,在过去一般都需要15行以上的代码。
但是,使用PHP5,你只需要两个新的Iterator:RecursiveIterator和RecursiveIteratorIterator,它们组合了所有上述功能。见列表B:
列表B
<?php
$it = new RecursiveDirectoryIterator("/tmp");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . "n";
}
?>
这时,输入结果将列出起始目录下的所有文件和目录。不必说,如果需要处理某个特定目录级下的所有文件——例如,递归压缩一个目录树;或修改一系列嵌套文件的组/所有者许可时——使用这种递归内置接口就非常方便。
现实应用:打印一个目录树
打印图形目录树是目录递归的一个常见应用。利用Iterator处理这个任务十分简单,因为Iterator类文档中包含一个专门为这个应用而编写 的实例类。DirectoryTreeIterator(感谢Marcus Boerger)为前面讨论的RecursiveIteratorIterator提供了其它改进,特别是在树结构中代表深度和位置的ASCII标记。
列表C说明了DirectoryTreeIterator的用法。
列表C
<?php
$it = new DirectoryTreeIterator("/tmp/cookbook/");
foreach($it as $path) {
echo $path . "n";
}
?>
以下是你看到的一部分输出结果:
-ch01
-recipe01
-example01.php
-example02.php
-recipe02
-example01.php
-example02.php
-recipe03
-example01.php
...
为更好了解这些DirectoryIterator的价值,尝试用标准的文件和目录函数对本教程中说明的三个应用编码
分享到:
相关推荐
运维兄弟一不小心在服务器上创建了无限递归的目录,拜托我帮忙解决。 so easy,写了一个递归删除目录,但结果出乎意料,一个递归目录删除成功,而另外一个却删除失败,刚开始怀疑文件被占用问题,后来被排除了。后来...
linux下使用md5sum递归生成整个目录的md5 今天要用md5sum操作目录,递归生成目录下所有文件的md5值,结果发现它不支持递归操作于是写了个php脚本处理下 代码: <?php $path ='/data/www/bbs/source'; $...
@901。Tags:易语言递归目录枚举。
C递归遍历目录.txt 适合初学者使用.。。。。。。。。。
使用递归生成文件目录树 .txt 使用递归生成文件目录树 .txt
主要为大家详细介绍了java递归与非递归实现扫描文件夹下所有文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
递归遍历目录并生成树的形式来展示信息,代码经调试通过,希望对新手有所帮助...
一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子一个递归删除指定目录和文件的例子
C# 用递归的方式查找指定文件夹下的所有子目录,C#代码 采用递归的方法來查找指定文件夹及它的所有子文件夹裏的内容。
linux 目录树实现代码,使用的是递归的算法
该代码源码未Python,执行后输入路径,可以对路径下文件进行递归遍历,将遍历结果,文件路径与文件名写入txt中,之后转码未excel
php如何实现递归遍历文件目录?
C# 递归遍历多层目录并将目录信息写入XML 代码简单为控制台代码不涉及窗口
它递归扫描提供的(或当前)目录,并报告存在的每个子目录的文件数和目录大小。 它还默认按目录大小排序,但还有其他选项。 最后,它是用Java编写的,并打包到一个可执行的JAR文件中。 内置的所有依赖项都可以在...
php递归json的类,php递归算法,php json类算法,php 递归json类封装
用c# 递归方法,遍历目录,输入一个路径,能输出此路径下的全部文件和文件夹里的内容
主要介绍了php递归创建目录的方法,实例分析了采用递归创建目录的技巧及使用三元运算符的实现方法,需要的朋友可以参考下
具有很多控制权和功能来递归扫描目录 用法 var scandir = require ( 'scandirectory' ) var path = process . cwd ( ) var options = { } function completionCallback ( err , list , tree ) { console . log ( {...
不好意思,因为网络原因,可能没有上传完全,新的地址,大家这个就不要下了 http://download.csdn.net/source/2507143
Dirsearch是一款用Python编写的目录扫描工具,可以用于发现Web应用程序中隐藏的文件和目录。它的特点是速度快、易于使用和高度可配置。Dirsearch提供了一个字典列表(默认自带),包含了常见的目录和文件名,同时也...