php列出了一个目录文件的第一个最新版本
下面是我试图创建一个基于文件的CMS博客的东西 为了显示帖子,我需要在一个文件夹中获取10个最新文件 我找到了,但我不知道必须读取所有文件,然后对它们进行排序,因为处理所需的时间取决于文件的数量 因此,我发现,通过这种方式,我可以逐个文件浏览文件夹,但正如opendir的文档所述,它使用文件系统的顺序,linux中的文件系统是基于时间戳的,但首先是修改的最新文件 所以我要问的是,有没有一种方法可以改变linux对文件夹中文件的排序方式。php列出了一个目录文件的第一个最新版本,php,linux,file,list,filesystems,Php,Linux,File,List,Filesystems,下面是我试图创建一个基于文件的CMS博客的东西 为了显示帖子,我需要在一个文件夹中获取10个最新文件 我找到了,但我不知道必须读取所有文件,然后对它们进行排序,因为处理所需的时间取决于文件的数量 因此,我发现,通过这种方式,我可以逐个文件浏览文件夹,但正如opendir的文档所述,它使用文件系统的顺序,linux中的文件系统是基于时间戳的,但首先是修改的最新文件 所以我要问的是,有没有一种方法可以改变linux对文件夹中文件的排序方式。 或者有什么方法可以满足我的要求吗?如果您有一个包含大量文件
或者有什么方法可以满足我的要求吗?如果您有一个包含大量文件的文件夹,并且担心scandir的性能,
您可以考虑设置一个CRONPORT来进行后台SCADIRR+排序,
确保将结果存储到另一个存储器中,如memcache/database/disk file 假设您的cronjob每5分钟运行一次,
cronjob脚本应覆盖存储上的结果
仅在成功后(在scandir+排序结束后) 因此,您的CMS脚本只是从存储器中读取,
或者,如果未找到存储结果,
然后继续进行scandir+排序 通常第一个用户点击页面时,缓存还没有准备好,他会得到非常慢的响应,
这就是使用cronjob的原因,它是为了进行预缓存。请看:,在用户评论中,它有一个获取最新文件的示例,例如,您可以修改它,根据其mtime返回10个最新文件。我想我可以帮到您,但我的代码将列出所有文件,而不仅仅是最后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";
}
?>
希望这对你有帮助
干杯文档中说opendir按日期顺序输出在哪里?我很确定它是按任意顺序排列的(可能是按顺序升序)。@从这里开始,我认为你必须阅读所有文件(使用scandir),因为你本质上是在对一个无序列表进行排序,最多是O(n*log(n))。。。linux似乎不允许您更改文件的顺序。出于好奇,为什么你的帖子是文件而不是MySql条目?@Tomas根据经验我很肯定这是错误的(或者至少是文件系统相关的)。你可能一开始就把它们整理好了…@因此,你可能是对的,我在文件管理和php方面没有太多经验;我只是想分享我的0.02美元。