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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:11:01