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

PHP实现指定文件夹及子目录遍历并赋值变量的问题

解决PHP遍历指定目录所有子目录(不含文件)并赋值变量的问题

方法一:递归函数实现

这是最直观的方式,通过递归遍历各级子目录,收集所有目录路径:

<?php
// 指定要遍历的目标目录
$targetDir = '/path/to/your/folder';
// 用来存储所有目录的数组
$allDirectories = [];

// 递归收集目录的函数
function gatherDirs($currentDir, &$dirCollection) {
    $dirHandle = opendir($currentDir);
    if (!$dirHandle) return;

    while (($entry = readdir($dirHandle)) !== false) {
        // 跳过当前目录(.)和上级目录(..)
        if ($entry === '.' || $entry === '..') continue;

        $fullPath = $currentDir . DIRECTORY_SEPARATOR . $entry;
        // 判断是否为目录
        if (is_dir($fullPath)) {
            // 将目录路径存入数组
            $dirCollection[] = $fullPath;
            // 递归遍历子目录
            gatherDirs($fullPath, $dirCollection);
        }
    }
    closedir($dirHandle);
}

// 调用函数收集所有目录
gatherDirs($targetDir, $allDirectories);

// 将数组中的每个目录赋值给独立变量(比如$dir_0, $dir_1...)
foreach ($allDirectories as $index => $dirPath) {
    ${"dir_$index"} = $dirPath;
}

// 测试输出
// print_r($allDirectories);
// echo $dir_0; // 输出第一个目录的路径
?>

方法二:用SPL递归迭代器(更简洁)

PHP的SPL扩展提供了现成的目录迭代工具,代码更简洁易维护:

<?php
$targetDir = '/path/to/your/folder';
$allDirectories = [];

// 创建递归目录迭代器,自动跳过.和..
$dirIterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($targetDir, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST // 先遍历当前目录,再遍历子目录
);

foreach ($dirIterator as $item) {
    if ($item->isDir()) {
        $allDirectories[] = $item->getRealPath(); // 存入绝对路径
    }
}

// 赋值给独立变量
foreach ($allDirectories as $i => $dir) {
    ${"directory_$i"} = $dir;
}

// 测试输出
// print_r($allDirectories);
?>

你之前可能踩的坑

  1. GLOB_ONLYDIR没递归:单纯用GLOB_ONLYDIR只能遍历一级子目录,要递归得加上GLOB_RECURSE,比如:

    $dirs = glob($targetDir . '/**', GLOB_ONLYDIR | GLOB_RECURSE);
    

    注意部分系统可能需要调整路径通配符的写法。

  2. 返回HTML文件:大概率是代码中不小心输出了HTML内容,或者服务器把错误信息以HTML格式返回了。检查代码里有没有多余的echo/print语句,或者开启错误排查模式看具体报错。

  3. 布局不符合预期:多数是没过滤./..,或者把文件也混入结果了。确保每次判断都严格检查is_dir(),跳过系统默认的两个目录项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:13:11