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

