大家现在也许对PHP语言比较感兴趣,因为它能够帮助我们很轻松的建设一个功能强大的网站。今天我们将向大家介绍的是有关PHP类搜索定位目录树的方法。大多数时候,在嵌套的PHP结 构里进行迭代需要你写出能够一个按顺序穿过层级、并检查其中每一个元素的递归函数。

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

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

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

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

// include class

include(”Find.php”);

// initialize finder

$finder=newFile_Find();

// read directory tree and print

$tree= $finder->mapTree(”/tmp”);

print_r($tree);

?>

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

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

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

Array

(

[0] =>Array

(

[0] =>/tmp

[1] =>/tmp/dummyA

[2] =>/tmp/dummyB

[3] =>/tmp/dummyA/dummyC

)

[1] =>Array

(

[0] =>/tmp/data.txt

[1] =>/tmp/dummyB/metoo.mp3

[2] =>/tmp/dummyB/track.dat

[3] =>/tmp/dummyA/dummyC/parrot.gif

)

)

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

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

// include class

include(”Find.php”);

// initialize finder

$finder=newFile_Find();

// print recursive directory tree

$tree= $finder->mapTreeMultiple(”/tmp”);

print_r($tree);

?>

列表D显示了输出结果:

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

Array

(

[0] =>data.txt

[dummyA] =>Array

(

[dummyC] =>Array

(

[0] =>parrot.gif

)

)

[dummyB] =>Array

(

[0] =>metoo.mp3

[1] =>track.dat

)

)

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

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

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

// include class

include(”Find.php”);

// initialize finder

$finder=newFile_Find();

// search for matching files in named directory

$results= $finder->glob(”/mp3/i”, “/usr/local/stuff”, “perl”);

print_r($results);

?>

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

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

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

// include class

include(”Find.php”);

// initialize finder

$finder=newFile_Find();

// search for matching files

// in named directory and subdirectories

$results= $finder->search(”/exe/i”, “/usr/local/winstuff”, “perl”);

print_r($results);

?>

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

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

Array

(

[0] =>/usr/local/winstuff/4HELP.EXE

[1] =>/usr/local/winstuff/ARJ.EXE

[2] =>/usr/local/winstuff/bzip2.exe

[3] =>/usr/local/winstuff/CRLF.EXE

[4] =>/usr/local/winstuff/DECODE.EXE

[5] =>/usr/local/winstuff/GREP.EXE

[6] =>/usr/local/winstuff/GPG/gpg.exe

[7] =>/usr/local/winstuff/GPG/uninst-gnupg.exe

[8] =>/usr/local/winstuff/GPG/WinPT.exe

[9] =>/usr/local/winstuff/Fprot/F-PROT.EXE

)

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

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

【责任编辑:曹凯 TEL:(010)68476606】

点赞 0

php 文件查找类,PHP类搜索定位目录树的具体实现方式解析相关推荐

  1. python与txt文件查找,在Python中搜索TXT文件

    readlines()会出现内存错误,因为给定了文件大小,您可能会读入内存无法合理处理的数据.因为这个文件是一个XML文件,所以您应该能够通读它,iterparse()将缓慢地解析XML,而不会占用多 ...

  2. sysvol 域控制器 文件_WinServer域控制器中重定位SYSVOL树

    WinServer域控制器中重定位SYSVOL树 作者 HonestQiao 2005年11月13日 16:00 概要 系统卷(或称 SYSVOL)是可由文件复制服务 (FRS) 复制的文件夹.文件系 ...

  3. java查找目录文件函数_java 实现 文件操作工具集。包括文件、目录树的拷贝、删除、移动、查找等工具函数...

    import java.io.*; /** * 文件操作工具集.包括文件.目录树的拷贝.删除.移动.查找等工具函数. * @author InternetTeam3 * @version 1.0 */ ...

  4. java7 文件_Java SE 7新特性之文件操作(9) - 遍历目录树

    在有些时候,我们可能需要遍历整个目录树,例如需要寻找所有的.java文件.Java SE 7提供了很方便的方法来实现这类的功能. Java SE 7提供的实现这类功能的方法就是FileVisitor接 ...

  5. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  6. Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...

    关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089    在开发中,我们常常用打印log的方 ...

  7. find排除文件 linux_Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键...

    Linux下find一次查找多个指定文件或者排除某类文件,在 GREP 中匹配多个关键字的方法 (1)Linux下find一次查找多个指定文件: 查找a.html和b.html find . -nam ...

  8. Linux查找多个文件、排除某类文件、匹配文件多处内容

    Linux下find一次查找多个指定文件或者排除某类文件,在 GREP 中匹配多个关键字的方法 (1)Linux查找多个文件: 查找a.html和b.html find . -name "a ...

  9. 【Android 热修复】热修复原理 ( 类加载机制 | PathClassLoader 加载 Dex 机制 | PathDexList 查找 Class 机制 | 类查找的顺序机制 )

    文章目录 一. PathClassLoader 加载 Dex 机制 二. PathDexList 查找 Class 机制 三. 类查找的顺序机制 一. PathClassLoader 加载 Dex 机 ...

最新文章

  1. .NET : 再谈谈XML中的命名空间问题
  2. 费曼:所有的科学知识都是不确定的
  3. 体育场[带权并查集]
  4. war包部署-配置入口类
  5. 5.4 ~ 5.6 刷题记录
  6. Linux 普通用户拿到root权限及使用szrz命令上传下载文件
  7. .pfx 证书和 .cer 证书
  8. iOS开发笔记--Layer 图层圆角、边框 、底纹其他常用操作
  9. Google 的 “行星级” cron 系统
  10. redis debug命令详解
  11. 如何夺回Windows 10系统权限?一分钟就够
  12. C++程序设计方法3:数组下标运算符重载
  13. 欢迎大家关注我的博客,让我们一起在知识的海洋中并肩自由翱翔!
  14. 电商商城小程序项目完整源码(微信小程序)
  15. 微信公众号查题搜题平台 功能齐全
  16. IntelliJ IDEA 解决控制台不能显示日志
  17. SAP 采购订单入库——移动类型
  18. iPhone/iPad应用使用麦克风的开启和关闭
  19. 手机出货量大跌34.9%,2019小米将何去何从
  20. 基本IO接口技术——微机第七章笔记

热门文章

  1. android 虚拟按键 增减和删除的方法
  2. u-boot移植第二弹——移植2012.10u-boot到RealARM210 cortex-A8开发板
  3. python selenium p_python selenium 常见问题列表
  4. 小学计算机几年级学3d建模,学了4年手绘和建模,你终于不会思考了
  5. 裴蜀定理(note)
  6. 1205: 正序数(归并排序统计正序数)
  7. 低代码平台是“业务上云”走向万千企业的最后一公里
  8. 首次公开!阿里巴巴云原生实时数仓核心技术揭秘
  9. Linux纯干货知识总结|面试专用
  10. 时间和空间复杂度概述【Java _demo版】