You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP获取Apache文件列表时目录无法按修改时间倒序排列问题

问题根因

  • 你当前代码里的rsort($files)只是对文件名的字符串做字典序倒序排列,完全没有读取文件/目录的修改时间作为排序依据,你看到普通文件"排序正常"只是巧合——大概率是你目录下的普通文件名刚好和修改时间正相关(比如带时间戳命名的文件),而目录命名不符合这个规律,所以才暴露了逻辑错误。
  • 额外注意你当前代码多了一个多余的右大括号},在函数定义结束后多写了一个,直接运行会报语法错误。

修复后的代码

需要先读取每个文件/目录的修改时间,再基于修改时间倒序排列:

<?php 
function getFiles(){
    $files = [];
    if($dir = opendir('.')){
        while($file = readdir($dir)){
            if (!in_array($file, [".", "..", "index.php"])) {
                // 同时存储文件名和对应的修改时间戳
                $files[] = [
                    'name' => $file,
                    'mtime' => filemtime($file) // 该方法对普通文件、目录均生效
                ];
            }
        }
        closedir($dir);
    }
    
    // 基于修改时间做倒序排列
    usort($files, function($a, $b) {
        return $b['mtime'] - $a['mtime'];
    });
    
    // 提取排序后的文件名返回
    return array_column($files, 'name');
}
?>

补充说明

  • filemtime()返回的是最后修改时间的Unix时间戳,排序精度到秒级,如果需要更高的排序稳定性,可以额外增加inode修改时间、文件名作为次级排序规则。

内容的提问来源于stack exchange,提问作者Wanderer Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:21:03