PHP遍历含子目录的文件夹失败,请求排查代码问题
问题分析与修复方案
你的代码有两个关键问题导致无法正常遍历子目录:
- 变量解析错误:递归调用
checkdir('$newdir');时用了单引号,PHP单引号内的变量不会被解析,实际传递的是字符串'$newdir'而非真实的子目录路径。 - 未处理特殊目录:
DirectoryIterator会包含.(当前目录)和..(上级目录),不排除它们会导致递归陷入循环或无效遍历。
修正后的代码如下:
<?php function checkdir($dir) { foreach (new DirectoryIterator($dir) as $file) { // 跳过当前目录和上级目录 if ($file->isDot()) { continue; } if ($file->isDir()) { $newdir = $file->getRealPath(); // 去掉单引号,正确传递变量 checkdir($newdir); } else { echo $file->getRealPath() . "<br>\n"; } } } checkdir('./'); ?>
修正说明:
- 新增
if ($file->isDot()) continue;:直接跳过.和..这两个无意义的特殊目录,避免递归异常。 - 将
checkdir('$newdir');改为checkdir($newdir);:去掉单引号后,PHP会正确解析变量$newdir的值,传递真实的子目录路径进行递归遍历。
内容的提问来源于stack exchange,提问作者Scott Daniels
相关产品推荐
相关产品推荐

