我有一个庞大的文件存储库,这些文件按编号文件夹排序。在每个文件夹中都有一个文件,该文件以唯一编号开头,然后是未知字符串。鉴于唯一编号,我如何打开或复制此文件?
例如: 我已经获得了号码'7656875',仅此而已。 我需要与名为'\ server \ 7656800 \ 7656875 foobar 2x4'的文件进行交互。
如何使用PHP实现这一目标?
答案 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*"`;
爆炸并修剪每个结果,然后希望你找到正确的结果。