PHP:根据包含unix标记的文件名,从10000个文件的目录中只获取一个文件

时间:2015-02-16 14:03:21

标签: php

我正在尝试扫描目录并仅使用文件名排序

获取目录中添加的最新文件

我的文件有不同的文件名,但所有文件名都在unix_timestamp之前,例如:     1423285600_smas293.jpg     1423285700_smas11.doc

所以我知道一种方法来做到这一点     $ files = scandir($ dir,SCANDIR_SORT_DESCENDING);     $ newest_file = $ files [0];

但是这似乎首先将所有文件加载到数组中..如果我有100K(理论上)文件?然后怎样呢?服务器会变得迟钝吗?

所以我希望只扫描并检索有限数量的文件到数组中,如果可能的话 - 或任何其他基本上得到我需要的策略...

此致

1 个答案:

答案 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");    
?>

最终,将数天或数周存储在文件夹中的文件当然是更好的解决方案。当你在一个目录中创建那么多文件时,你的文件系统最终会窒息。