Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在包含文件结尾的文件夹中更快地匹配文件名_Php_File_Pattern Matching - Fatal编程技术网

Php 在包含文件结尾的文件夹中更快地匹配文件名

Php 在包含文件结尾的文件夹中更快地匹配文件名,php,file,pattern-matching,Php,File,Pattern Matching,我使用这个readdir在文件夹中查找文件 $handler = opendir($folder); while ($file = readdir($handler)) { if ($file != "." && $file != ".." && substr($file,0,7) == '98888000') { print $file. "<br />"; } } 但是它什么也没有返回。也许呢?它查找与模式匹配的文件: gl

我使用这个readdir在文件夹中查找文件

$handler = opendir($folder);

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

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

}
但是它什么也没有返回。

也许呢?它查找与模式匹配的文件:

glob('98888000*')
可能有用


如果您需要
opendir
readdir
,那么您可能需要查看一下。

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

$folder = realpath($folder);
foreach (glob($folder.'/98888000*', GLOB_NOSORT) as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
由于速度的原因,我使用了这个选项

您可以使用以下工具,而不是使用
glob()


相关:和。

在发布之前,我看了一下glob。我正在用第一个尝试过的解决方案更新我的代码。重点是
glob
将使用操作系统自己的匹配工具(或者至少是PHP本机实现的工具),因此比为每个文件名使用子字符串要快得多。浏览成千上万的文件应该不需要几分钟!你确定你没有更大的问题,比如筋疲力尽的索引节点?
$folder = realpath($folder);
foreach (glob($folder.'/98888000*', GLOB_NOSORT) as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
$folder = realpath($folder);
$query = $folder.'/98888000*';
foreach(new GlobIterator($query) as $file)
{
    $name = $file->getFilename();
    $size = $file->getSize();
    echo "$name size $size \n";
}