列表D
Array
(
[0] => data.txt
[dummyA] => Array
(
[dummyC] => Array
(
[0] => parrot.gif
)
)
[dummyB] => Array
(
[0] => metoo.mp3
[1] => track.dat
)
)
提示:你可以给mapTreeMultiple()加上一个可选的参数,限定它在执行递归时向下查询的层数。
用glob()方法,你可以在指定目录下搜索与特定Perl兼容型的规则表达式匹配的文件。请看一下列表E。
列表E
<?php
// include class
include("Find.php");
// initialize finder
$finder = new File_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中是一个例子。
列表F
<?php
// include class
include("Find.php");
// initialize finder
$finder = new File_Find();
// search for matching files
// in named directory and subdirectories
$results = $finder->search("/exe/i", "/usr/local/winstuff", "perl");
print_r($results);
?>
列表G显示了输出的一个样本:
列表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使得简单有效地完成一个相对复杂的任务成为可能,而且你会感到最小的压力,这也就是我为什么极力向你推荐它的原因。下次当你需要在目录树上执行一个文件查找操作时,不妨你自己尝试一下。祝你编程快乐! |