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
相关产品推荐
相关产品推荐

