PHP使用readdir实现先排序文件夹后排序文件的解决方案
PHP readdir 先输出目录后输出文件实现方案
核心思路
采用两次目录遍历的实现方式,全程不需要将全量目录条目存入数组,内存开销稳定,可支持十万级以上文件的目录处理:
- 第一次遍历目录,仅输出父目录标识
..和所有子目录 - 第二次遍历目录,仅输出所有普通文件
代码实现
// 替换为你的目标目录路径 $targetDir = '/path/to/your/directory'; // 第一次遍历:输出所有目录 if ($dh = opendir($targetDir)) { // 按预期输出要求先打印父目录标识 echo "..\n"; while (($file = readdir($dh)) !== false) { // 跳过默认的.和.. if ($file === '.' || $file === '..') { continue; } $fullPath = $targetDir . DIRECTORY_SEPARATOR . $file; if (is_dir($fullPath)) { echo $file . "/\n"; } } closedir($dh); } // 第二次遍历:输出所有文件 if ($dh = opendir($targetDir)) { while (($file = readdir($dh)) !== false) { if ($file === '.' || $file === '..') { continue; } $fullPath = $targetDir . DIRECTORY_SEPARATOR . $file; if (is_file($fullPath)) { echo $file . "\n"; } } closedir($dh); }
方案优势
- 内存占用极低:全程仅保存当前遍历的单条文件名,不会随目录下文件数量增长而增加内存消耗,完全适配5万+文件的场景
- 性能开销可控:两次目录遍历的IO开销远低于全量读取条目后排序的CPU+内存开销,大文件量场景下性能表现更好
可选优化(需要目录/文件内部排序时)
如果需要对目录或者文件列表按名称排序,仅需将对应类别的条目存入单独数组,排序后输出即可,相比全量存储所有条目仍可减少近一半的内存占用。
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

