【发布时间】:2013-01-09 03:59:03
【问题描述】:
假设我们有一个这样的循环:
foreach($entries as $entry){ // let's say this loops 1000 times
if (file_exists('/some/dir/'.$entry.'.jpg')){
echo 'file exists';
}
}
我假设这必须访问硬盘 1000 次并检查每个文件是否存在。
不如这样做呢?
$files = scandir('/some/dir/');
foreach($entries as $entry){ // let's say this loops 1000 times
if (in_array($entry.'.jpg', $files)){
echo 'file exists';
}
}
问题1:如果这一次访问硬盘,那么我相信它应该会快很多。我说的对吗?
但是,如果我必须检查文件的子目录怎么办,如下所示:
foreach($entries as $entry){ // let's say this loops 1000 times
if (file_exists('/some/dir/'.$entry['id'].'/'.$entry['name'].'.jpg')){
echo 'file exists';
}
}
问题2:如果我想应用上述技术(数组中的文件)来检查条目是否存在,我如何将scandir()子目录放入数组中,以便我可以用这种方法比较文件是否存在?
【问题讨论】:
-
我假设这必须访问硬盘 1000 次并检查每个文件是否存在。 -> 如果您没有缓存...
-
file_exists() 被称为相当慢。但是你到底想开发什么?大多数时候这不是速度问题,而是编码错误。
-
您可以通过先使用
array_flip()然后使用isset()来加速in_array()。 -
您的问题没有明确的答案;您需要多次扫描文件夹吗?缓存它仍然重要吗?
$entries是如何填充的?等
标签: php