PHP - 只知道部分名称时打开或复制文件?

时间:2010-04-22 15:10:09

标签: php file search

我有一个庞大的文件存储库,这些文件按编号文件夹排序。在每个文件夹中都有一个文件,该文件以唯一编号开头,然后是未知字符串。鉴于唯一编号,我如何打开或复制此文件?

例如: 我已经获得了号码'7656875',仅此而已。 我需要与名为'\ server \ 7656800 \ 7656875 foobar 2x4'的文件进行交互。

如何使用PHP实现这一目标?

4 个答案:

答案 0 :(得分:4)

如果您知道目录名称,请考虑使用glob()

$matches = glob('./server/dir/'.$num.'*');

然后,如果只有一个文件应该以数字开头,那就进行第一次(也是唯一的)匹配。

答案 1 :(得分:3)

Yacoby suggested一样,glob应该可以解决问题。你也可以有多个占位符,所以如果你知道深度,而不是正确的命名,你可以这样做:

$matchingFiles = glob('/server/*/7656875*');

匹配

"/server/12345/7656875 foo.txt"
"/server/56789/7656875 bar.jpg"

但不是

"/server/12345/subdir/7656875 foo.txt"

如果您不知道深度glob()无效,您可以使用RecursiveDirectoryIterator传递最顶层的文件夹路径,例如

$iterator = new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator('/server'));

foreach($iterator as $fileObject) {
    // assuming the filename begins with the number
    if(strpos($fileObject->getFilename(), '7656875') === 0) {
         // do something with the $fileObject, e.g.
         copy($fileObject->getPathname(), '/somewhere/else');
         echo $fileObject->openFile()->fpassthru();
    }
}

*注意:代码未经测试但应该可以使用

DirectoryIterator返回SplFileInfo个对象,因此您可以使用它们通过高级API直接访问文件。

答案 2 :(得分:0)

$result = system("ls \server\" . $specialNumber . '\');
$fh = fopen($result, 'r');

答案 3 :(得分:0)

如果它隐藏在可变长度的子子目录下面,请使用find

echo `find . -name "*$input*"`;

爆炸并修剪每个结果,然后希望你找到正确的结果。

相关问题