php首先列出最新的目录文件

时间:2011-11-28 02:02:17

标签: php linux file list filesystems

我正在尝试创建基于文件的CMS博客。

要显示我需要的帖子,请在文件夹中获取10个最新文件。

我找到了scandir,但我不知道它要读取所有文件,然后对它们进行排序,因为它需要时间来处理对文件数量的依赖。

所以我发现opendir,这样我可以逐个浏览文件夹文件,但是,正如opendir的文档所说,它使用的文件系统的顺序在linux中基于时间戳,但首先来了修改了最新文件。

所以我要问的是有一种方法可以改变linux如何命令文件夹中的文件。 或者有办法做我想做的事吗?

3 个答案:

答案 0 :(得分:1)

查看:http://php.net/manual/en/function.filemtime.php,在用户评论中有一个示例来获取最新文件,您可以修改该文件以根据其mtime返回10个最新文件。

答案 1 :(得分:0)

如果你有一个包含大量文件的文件夹,并担心scandir的性能,
你可以考虑设置一个cronjob来做后台scandir +排序,
确保将结果存储到另一个存储中,如memcache / database / disk-file

我们说你的cronjob每5分钟就会跑一次,
你的cronjob脚本应该覆盖存储上的结果
只有在成功时(在scandir +排序结束后)

因此,您的CMS脚本只是从存储中读取,
或者如果没有找到存储结果, 然后继续scandir +排序

通常第一个用户点击页面并且缓存没有准备好,他会得到一个非常慢的响应,
这是使用cronjob的原因是进行预缓存

答案 2 :(得分:0)

我想我可以帮到你,但我的代码会列出所有文件而不是最后20个,很容易添加,而且tis代码会列出最新到最旧的文件:

<?PHP

$directory="photos";
$sortOrder="newestFirst";

   $results = array();
   $handler = opendir($directory);

while ($file = readdir($handler)) { 
       if ($file != '.' && $file != '..' && $file != "robots.txt" && $file != ".htaccess"){
           $currentModified = filectime($directory."/".$file);
           $file_names[] = $file;
           $file_dates[] = $currentModified;
       }   
   }
       closedir($handler);

   //Sort the date array by preferred order
   if ($sortOrder == "newestFirst"){
       arsort($file_dates);
   }else{
       asort($file_dates);
   }

   //Match file_names array to file_dates array
   $file_names_Array = array_keys($file_dates);
   foreach ($file_names_Array as $idx => $name) $name=$file_names[$name];
   $file_dates = array_merge($file_dates);

   $i = 0;

   //Loop through dates array and then echo the list
   foreach ($file_dates as $$file_dates){
       $date = $file_dates;
       $j = $file_names_Array[$i];
       $file = $file_names[$j];
       $i++;

       echo  "<img src=photos/$file>\n";       
   }

?> 

希望对你有所帮助。

欢呼声