我正在尝试扫描目录并仅使用文件名排序
获取目录中添加的最新文件我的文件有不同的文件名,但所有文件名都在unix_timestamp之前,例如: 1423285600_smas293.jpg 1423285700_smas11.doc
所以我知道一种方法来做到这一点 $ files = scandir($ dir,SCANDIR_SORT_DESCENDING); $ newest_file = $ files [0];
但是这似乎首先将所有文件加载到数组中..如果我有100K(理论上)文件?然后怎样呢?服务器会变得迟钝吗?
所以我希望只扫描并检索有限数量的文件到数组中,如果可能的话 - 或任何其他基本上得到我需要的策略...
此致
答案 0 :(得分:1)
您可以逐个使用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");
?>
最终,将数天或数周存储在文件夹中的文件当然是更好的解决方案。当你在一个目录中创建那么多文件时,你的文件系统最终会窒息。