科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件如何用PHP DirectoryIterators递归扫描目录

如何用PHP DirectoryIterators递归扫描目录

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

PHP5中增加了Iterator,一组有助于导航和处理等级数据结构的现成接口,这是PHP5最有趣的新特性之一。

作者:builder.com.cn 2007年6月28日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

处理嵌套式目录树

递归处理一个嵌套式目录树几乎同样简单。在这种情况下,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标记。

你可以在php.net网站查看这个实例类的源代码

列表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的价值,尝试用标准的文件和目录函数对本教程中说明的三个应用编码。之后,你会进一步欣赏到PHP5 DirectoryIterators带来的简洁和方便。祝编码快乐!

责任编辑:张琎

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章