利用正确的PHP类搜索定位目录树

开发者在线 Builder.com.cn 更新时间:2006-09-04作者:Contributor Melonfire 来源:

列表C

<?php
// include class
include("Find.php");

// initialize finder
$finder = new File_Find();

// print recursive directory tree
$tree = $finder->mapTreeMultiple("/tmp");
print_r($tree);
?>

列表D显示了输出结果:

列表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使得简单有效地完成一个相对复杂的任务成为可能,而且你会感到最小的压力,这也就是我为什么极力向你推荐它的原因。下次当你需要在目录树上执行一个文件查找操作时,不妨你自己尝试一下。祝你编程快乐!

责任编辑:张琎

查看本文的国际来源

用户评论

  • 用户名
  • 评论内容