我正在尝试扫描目录,并使用文件名排序仅获取目录中添加的最新文件
我的文件具有不同的文件名,但所有文件都带有unix_timestamp,例如:1423285600_smas293.jpg 1423285700_smas11.doc
所以我知道一种执行此操作的方法$ files = scandir($ dir,SCANDIR_SORT_DESCENDING); $ newest_file = $ files [0];
但这似乎首先将所有文件加载到数组中..如果我有100K(理论上)的文件?然后怎样呢?服务器会变慢吗?
因此,我希望将有限数量的文件扫描并检索到数组中,如果可能的话,或者其他基本上可以满足我需要的策略。
问候
那么你可以使用opendir()
和readdir()
目录项一个接一个,而只记得字母最大的文件名。它是什么scandir()
和glob()
在水中做最后。这样,您不必将所有内容都加载到内存中。尽管您仍然必须遍历理论上所有的100K文件:
<?php
$biggest = false;
if ($fp = opendir('/tmp')) {
while ( ($entry = readdir($fp)) )
if (! $biggest or ($entry > $biggest) )
$biggest = $entry;
closedir($fp);
}
print("Biggest: " . $biggest . "\n");
?>
最终,将您的文件按天或数周存储在文件夹中当然是更好的解决方案。当您在一个目录中创建那么多文件时,文件系统最终将陷入困境。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句