PHP目录扫描存TXT:添加指定扩展名过滤功能需求
给PHP目录扫描函数添加扩展名过滤功能
你提供的原函数存在一些小问题:比如多余的嵌套大括号、每次循环重复执行文件打开/写入操作(IO效率偏低),我们先修复这些问题,再添加扩展名过滤功能。
修改后的函数新增了$excludeExts参数,用来传入需要排除的扩展名数组(比如['txt', 'log']),扫描时会自动跳过这些扩展名的文件:
function dirscan($dir, $file, $excludeExts = []) { // 扫描目录并按自然排序 $folder = scandir($dir); natsort($folder); // 提前打开文件,避免循环内重复IO操作 $fh = fopen($file, 'a'); if (!$fh) { // 可选:可添加文件打开失败的提示或日志逻辑 return false; } foreach ($folder as $value) { // 跳过当前目录和上级目录的占位符 if ($value === '.' || $value === '..') { continue; } $filePath = $dir . DIRECTORY_SEPARATOR . $value; // 仅对文件做扩展名过滤,目录不受影响 if (is_file($filePath)) { $ext = strtolower(pathinfo($value, PATHINFO_EXTENSION)); // 统一转小写后判断,避免大小写差异导致的过滤失效 if (in_array($ext, array_map('strtolower', $excludeExts))) { continue; } } // 写入符合要求的目录/文件名 fwrite($fh, $value . PHP_EOL); } // 关闭文件句柄 fclose($fh); return true; }
功能说明
- 新增
$excludeExts参数:默认空数组,可传入任意数量需要排除的扩展名(不区分大小写,比如['php', 'TXT']都会生效) - 优化IO操作:仅打开/关闭一次文件,大幅提升执行效率
- 逻辑完善:仅对文件做扩展名过滤,目录会正常写入结果
- 容错处理:添加文件打开失败的判断,返回布尔值标识执行状态
使用示例
比如要扫描./demo目录,把内容写入file_list.txt,同时排除.php和.log文件:
dirscan('./demo', 'file_list.txt', ['php', 'log']);
内容的提问来源于stack exchange,提问作者uooo foo
相关产品推荐
相关产品推荐

