在包含数千个文件的文件夹中匹配文件名的更快方法
我使用这个 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";
}
但它什么也没返回。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
glob
怎么样?它找到与模式匹配的文件:可能有效。
如果您需要
opendir
和readdir
,那么您可能需要看看fnmatch
。What about
glob
maybe? It finds files matching a pattern:might work.
If you need
opendir
andreaddir
, then you might want to have a look atfnmatch
.首先检查
$folder
末尾是否包含/
,这可能会导致glob
出现问题(模式是错误的) 。因此,根据需要添加内容并删除编写适当的 glob 模式不需要的内容:我使用了
GLOB_NOSORT
出于速度原因。您可以使用 glob() >
GlobIterator
类:相关: 迭代目录中的特定文件 和 9 种迭代目录的方法PHP。
First check if
$folder
contains a/
at it's end or not, this could have caused your problem withglob
(the pattern was just wrong). So add things as needed and remove those things not needed to write a propper glob pattern:I used the
GLOB_NOSORT
for speed reasons.Instead of using
glob()
you can make use of theGlobIterator
class:Related: Iterate over specific files in a directory and 9 Ways to Iterate Over a Directory in PHP.