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

如何遍历并获取所有嵌套文件及子文件夹的路径与数据

自动遍历多层嵌套文件夹与文件的PHP实现

要实现自动遍历home目录下所有层级的文件夹和文件,你可以用以下两种常用方法:

方法一:递归函数遍历

这种方式逻辑直观,适合简单场景:

// 定义递归遍历函数
function traverseDirectory($dir) {
    // 获取当前目录下的所有文件/文件夹(确保路径格式统一)
    $items = glob(rtrim($dir, '/') . '/*');
    
    foreach ($items as $item) {
        $path = realpath($item); // 获取绝对路径,也可直接用相对路径$item
        
        if (is_dir($path)) {
            // 处理当前文件夹
            do_something_with_folder($path);
            // 递归遍历子文件夹
            traverseDirectory($path);
        } else {
            // 仅处理txt文件,可根据需求修改过滤规则
            if (pathinfo($path, PATHINFO_EXTENSION) === 'txt') {
                do_something_with_file($path);
            }
        }
    }
}

// 启动遍历
traverseDirectory('home');

方法二:使用SPL迭代器(推荐)

PHP的SPL扩展提供了更高效稳定的目录遍历方案,适合复杂或深层级目录:

// 创建递归目录迭代器,跳过.和..目录
$dirIterator = new RecursiveDirectoryIterator('home', RecursiveDirectoryIterator::SKIP_DOTS);
// 创建递归迭代器,SELF_FIRST表示先处理当前目录项再处理子目录
$iterator = new RecursiveIteratorIterator($dirIterator, RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $item) {
    $path = $item->getPathname();
    
    if ($item->isDir()) {
        do_something_with_folder($path);
    } else {
        // 过滤txt文件
        if ($item->getExtension() === 'txt') {
            do_something_with_file($path);
        }
    }
}

注意事项

  • 路径选择:realpath()会返回绝对路径,若需相对路径可直接使用$item或$item->getPathname()的相对结果
  • 文件过滤:可根据需求调整文件类型判断逻辑,比如移除判断以处理所有文件
  • 性能:递归函数在目录层级极深时可能触发栈溢出,SPL迭代器的稳定性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:40:30