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

获取home目录完整文件夹树及各目录下TXT文件计数问题

问题

主目录为home,包含多层子文件夹与txt文件,需要获取完整文件夹树列表并统计每个文件夹内的txt文件数量。现有代码能列出文件夹,但文件计数始终为0,推测需使用完整文件夹路径而非仅名称,但不知如何实现。

原代码

function rscan ($dir) {
  $all = array_diff(scandir($dir), [".", ".."]);
  foreach ($all as $ff) {
    if(is_dir($dir . $ff)){
      echo $ff . "\n";  // 这部分正常工作
      $arr = glob($ff . "/*.txt");
      echo count($arr) . "\n";  // 始终返回0
      rscan("$dir$ff/");
    }
  }
}
 
rscan("home/");

问题原因

你推测的完全正确——问题出在路径拼接上。glob($ff . "/*.txt")中的$ff只是文件夹的名称,而非完整路径,glob会在当前工作目录下查找该文件夹内的txt文件,而非$dir指定的目标目录,自然找不到文件,计数始终为0。

修正方案

只需要将当前目录$dir与文件夹名称$ff拼接成完整路径,再传给glob即可:

function rscan ($dir) {
  $all = array_diff(scandir($dir), [".", ".."]);
  foreach ($all as $ff) {
    $fullFolderPath = $dir . $ff;
    if(is_dir($fullFolderPath)){
      // 输出文件夹名称(如果需要完整路径,改为echo $fullFolderPath . "\n")
      echo $ff . "\n";
      // 使用完整路径匹配当前文件夹下的所有txt文件
      $txtFileList = glob($fullFolderPath . "/*.txt");
      echo count($txtFileList) . "\n";
      // 递归扫描子文件夹,确保路径格式正确
      rscan($fullFolderPath . "/");
    }
  }
}
 
rscan("home/");

额外说明

  • 如果需要输出文件夹的完整路径而非仅名称,把echo $ff . "\n"替换为echo $fullFolderPath . "\n"即可
  • 若要匹配包括子文件夹在内的所有txt文件,可以使用glob($fullFolderPath . "/**/*.txt", GLOB_BRACE),但需确保PHP版本支持递归匹配
  • 注意路径斜杠的一致性,当前代码中rscan($fullFolderPath . "/")的写法能保证每次递归的路径结尾都有斜杠,避免拼接错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:35:50