更快地匹配包含文件thousend的文件夹中的文件名

时间:2011-08-06 11:54:34

标签: php file pattern-matching

我正在使用此readdir在文件夹

中查找文件
$handler = opendir($folder);

while ($file = readdir($handler)) {

  if ($file != "." && $file != ".." && substr($file,0,7) == '98888000') {
    print $file. "<br />";
  }

}

但由于文件夹中有大量文件,因此完成请求需要几分钟时间:如何加快速度?
考虑一下我在PHP5 + IIS上。

我甚至试过了glob()

foreach (glob($folder.98888000."*.pdf") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}

但它没有返回任何内容。

2 个答案:

答案 0 :(得分:2)

那可能是glob怎么样?它找到与模式匹配的文件:

glob('98888000*')

可能有用。

如果您需要opendirreaddir,那么您可能需要查看fnmatch

答案 1 :(得分:0)

首先检查$folder是否包含/,这可能会导致glob出现问题(模式错误)。因此,根据需要添加内容并删除编写propper glob模式所不需要的东西:

$folder = realpath($folder);
foreach (glob($folder.'/98888000*', GLOB_NOSORT) as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}

我出于速度原因使用了GLOB_NOSORT

您可以使用GlobIterator class

,而不是使用glob()
$folder = realpath($folder);
$query = $folder.'/98888000*';
foreach(new GlobIterator($query) as $file)
{
    $name = $file->getFilename();
    $size = $file->getSize();
    echo "$name size $size \n";
}

相关: Iterate over specific files in a directory9 Ways to Iterate Over a Directory in PHP