热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP类搜索定位目录树的具体实现方式解析_PHP教程

PHP类搜索定位目录树的具体实现方式解析。大家现在也许对但是递归函数是一个很复杂而且杂乱的东西,大多数开发者(包括我自己)并不是真正喜欢使用它们。这就是为什么当我
大家现在也许对但是递归函数是一个很复杂而且杂乱的东西,大多数开发者(包括我自己) 并不是真正喜欢使用它们。这就是为什么当我的上一个项目需要为一个单独文件扫描一个目录层级时(一个典型的递归函数任务),我甚至没有考虑过要循环自己的 代码。我取而代之地直接使用了PEAR和它的File_Find类,免除了我搜索多层目录结构的痛苦。

File_Find类是为了能让你真 正做好两件事情而设计的。第一,它可以让你扫描一个目录树,然后将其转换成为PHP结构——一个嵌套的数组——它反映了原始层级的父子关系。第二,它可以 让你在一个目录树下搜索一个或多个类型相匹配的文件。这种类型可以是一个简单的字符串,也可以是一个复杂的Perl规则的表达式;File_Find能够 处理上述两种中的任意一种格式,并将返回一个包括了每一对的详细文件和路径信息的数组。

一开始,手动安装程序包,你可以下载它,然后将其内容提取到PEAR根目录下,也可以利用PEAR安装程序。

接下来,创建以下PHP脚本(列表A),并将它保存在你的Web服务器的文件根目录下:

PHP类搜索定位目录树列表A

  1. < ?php
  2. // include class
  3. include(”Find.php”);
  4. // initialize finder
  5. $finder = new File_Find();
  6. // read directory tree and print
  7. $tree = $finder->mapTree(”/tmp”);
  8. print_r($tree);
  9. ?>

在此,我初始化了一个新的File_Find()对象, 并用一个目录路径调用其mapTree()方法。mapTree()方法读取指定的目录,然后产生它的一个两元素的层级结构“数组表(array map)”。此数组中第一个元素列出了所找到的所有目标目录下的子目录,而第二个元素列出了找到的所有文件。然后就有可能扫描这些序列,在应用程序中使用 它们了——例如,重建目录树,或者在自定义标准的基础上筛选文件和目录。

列表B是以上脚本输出的一个例子:

PHP类搜索定位目录树列表B

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => /tmp
  6. [1] => /tmp/dummyA
  7. [2] => /tmp/dummyB
  8. [3] => /tmp/dummyA/dummyC
  9. )
  10. [1] => Array
  11. (
  12. [0] => /tmp/data.txt
  13. [1] => /tmp/dummyB/metoo.mp3
  14. [2] => /tmp/dummyB/track.dat
  15. [3] => /tmp/dummyA/dummyC/parrot.gif
  16. )
  17. )

你也可以用另一种方式,用mapTreeMultiple()方法,它递归读取指定的目录,产生一个复制其树形结构的嵌套数组。列表C为你展示了一个例子。

PHP类搜索定位目录树列表C

  1. < ?php
  2. // include class
  3. include(”Find.php”);
  4. // initialize finder
  5. $finder = new File_Find();
  6. // print recursive directory tree
  7. $tree = $finder->mapTreeMultiple(”/tmp”);
  8. print_r($tree);
  9. ?>

列表D显示了输出结果:

PHP类搜索定位目录树列表D

  1. Array
  2. (
  3. [0] => data.txt
  4. [dummyA] => Array
  5. (
  6. [dummyC] => Array
  7. (
  8. [0] => parrot.gif
  9. )
  10. )
  11. [dummyB] => Array
  12. (
  13. [0] => metoo.mp3
  14. [1] => track.dat
  15. )
  16. )

提示:你可以给mapTreeMultiple()加上一个可选的参数,限定它在执行递归时向下查询的层数。

用glob()方法,你可以在指定目录下搜索与特定Perl兼容型的规则表达式匹配的文件。请看一下列表E。

PHP类搜索定位目录树列表E

  1. < ?php
  2. // include class
  3. include(”Find.php”);
  4. // initialize finder
  5. $finder = new File_Find();
  6. // search for matching files in named directory
  7. $results = $finder->glob(”/mp3/i”, “/usr/local/stuff”, “perl”);
  8. print_r($results);
  9. ?>

在这里,glob()方法访问指定目录下所有名称中带有字符串mp3的文件。注意我对修饰符i的使用,它使得搜索没有大小写之分,还有我使用了第三个自变量,告诉类要使用Perl regex函数,而不是默认的PHP函数。

File_Find类由于它的search()方法而真正发挥作用起来,这个方法结合了mapTreeMultiple()和glob()方法的能力进行多层目录搜索。列表F中是一个例子。

PHP类搜索定位目录树列表F

  1. < ?php
  2. // include class
  3. include(”Find.php”);
  4. // initialize finder
  5. $finder = new File_Find();
  6. // search for matching files
  7. // in named directory and subdirectories
  8. $results = $finder->search(”/exe/i”, “/usr/local/winstuff”, “perl”);
  9. print_r($results);
  10. ?>

列表G显示了输出的一个样本:

PHP类搜索定位目录树列表G

  1. Array
  2. (
  3. [0] => /usr/local/winstuff/4HELP.EXE
  4. [1] => /usr/local/winstuff/ARJ.EXE
  5. [2] => /usr/local/winstuff/bzip2.exe
  6. [3] => /usr/local/winstuff/CRLF.EXE
  7. [4] => /usr/local/winstuff/DECODE.EXE
  8. [5] => /usr/local/winstuff/GREP.EXE
  9. [6] => /usr/local/winstuff/GPG/gpg.exe
  10. [7] => /usr/local/winstuff/GPG/uninst-gnupg.exe
  11. [8] => /usr/local/winstuff/GPG/WinPT.exe
  12. [9] => /usr/local/winstuff/Fprot/F-PROT.EXE
  13. )

这就是你的递归目录查询,仅仅只有四行代码!

正如你所看到的那样,File_Find使得简单有效地完成一个相对复杂的任务成为可能,而且你会感到最小的压力,这也就是我为什么极力向你推荐它的原因。下次当你需要在PHP类搜索定位目录树上执行一个文件查找操作时,不妨你自己尝试一下。祝你编程快乐!


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446283.htmlTechArticle大家现在也许对 但是递归函数是一个很复杂而且杂乱的东西,大多数开发者(包括我自己) 并不是真正喜欢使用它们。这就是为什么当我...


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 有关phpfgetss()函数的文章推荐10篇
    有关phpfgetss()函数的文章推荐10篇:了解如何使用PHP的各种文件函数。查看诸如fopen、fclose和feof之类的基本文件函数;了解诸如fgets、fgetss和f ... [详细]
  • 导读:在编程的世界里,语言纷繁多样,而大部分真正广泛流行的语言并不是那些学术界的产物,而是在通过自由发挥设计出来的。和那些 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
晓风朗月
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有