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

本文介绍了如何使用PHP的File_Find类来搜索和定位目录树。File_Find类提供了一种有效的方法,可以遍历目录结构,查找匹配特定规则的文件。通过mapTree()和mapTreeMultiple()方法,可以构建或递归地展示目录树,而glob()和search()方法则用于根据Perl正则表达式查找文件。这个类简化了在PHP中进行复杂目录和文件搜索的任务。
摘要由CSDN通过智能技术生成

大家现在也许对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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值