Php 在包含文件结尾的文件夹中更快地匹配文件名
我使用这个readdir在文件夹中查找文件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
$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";
}