如何用PHP/JS读取用户上传txt指定内容且无需存入数据库
功能实现方案
两种方案都满足「不写死文件路径、无需存储用户上传文件到数据库/持久化存储、提取关键词匹配结果到textarea」的要求,优先选纯JS方案,实时性最好,无页面刷新。
方案1:纯Javascript实现(推荐)
完全在用户本地浏览器运行,文件不需要上传到服务器,选中txt文件后立刻完成关键词匹配,无等待。
完整可直接运行代码:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>txt关键词提取</title> </head> <body> <div> <!-- 可自定义要搜索的关键词 --> <label>搜索关键词:<input type="text" id="keyword" value="model number"></label> <br><br> <input type="file" id="fileInput" accept=".txt"> <br><br> <textarea id="resultArea" cols="80" rows="20" placeholder="匹配结果将展示在这里"></textarea> </div> <script> const fileInput = document.querySelector('#fileInput'); const resultArea = document.querySelector('#resultArea'); const keywordInput = document.querySelector('#keyword'); // 统一绑定提取逻辑:文件选择/关键词修改时实时更新结果 function extractMatchResult() { const files = fileInput.files; const keyword = keywordInput.value.trim(); if(files.length === 0 || !keyword) { resultArea.value = ''; return; } const file = files[0]; // 只处理txt文件 if(file.type !== 'text/plain') { alert('请上传txt格式文件'); return; } const reader = new FileReader(); reader.onload = (e) => { const fileContent = e.target.result; // 按换行拆分所有行,兼容windows/mac换行符 const lines = fileContent.split(/\r\n|\n/); // 匹配关键词,不区分大小写 const matchReg = new RegExp(keyword, 'i'); const matchedLines = lines.filter(line => matchReg.test(line)); // 把匹配结果写入textarea resultArea.value = matchedLines.join('\n'); }; reader.onerror = (e) => alert('文件读取失败:' + e.target.error.name); reader.readAsText(file); } fileInput.addEventListener('change', extractMatchResult); keywordInput.addEventListener('input', extractMatchResult); </script> </body> </html>
代码逻辑说明:
- 支持自定义修改搜索关键词,关键词修改/文件切换时实时更新匹配结果
- 自动兼容不同系统的换行符,匹配默认不区分大小写
- 全程文件只在用户本地浏览器处理,不会上传到任何服务器
方案2:PHP实现
利用PHP上传文件的临时文件机制处理:用户上传的文件会被PHP自动存在系统临时目录,脚本执行结束后会自动删除,不需要手动持久化存储或者写入数据库,也不需要写死文件路径,通过$_FILES超全局变量获取上传文件的临时路径即可。
完整可直接运行代码:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>txt关键词提取</title> </head> <body> <form enctype="multipart/form-data" method="post" action=""> <div> <input type="file" name="upload_file" accept=".txt"> <button type="submit">提取匹配结果</button> <br><br> <textarea cols="80" rows="20" placeholder="匹配结果将展示在这里"> <?php // 仅在有文件上传时执行处理逻辑 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['upload_file'])) { $uploadFile = $_FILES['upload_file']; // 校验上传是否出错 if ($uploadFile['error'] !== UPLOAD_ERR_OK) { echo "文件上传出错,错误码:" . $uploadFile['error']; exit; } // 校验是否为合法上传的临时文件 $tmpPath = $uploadFile['tmp_name']; if (!is_uploaded_file($tmpPath)) { echo "非法文件上传"; exit; } // 读取临时文件的所有行,不需要写死固定路径 $lines = file($tmpPath, FILE_IGNORE_NEW_LINES); // 要搜索的关键词,可自行修改 $keyword = "model number"; // 用preg_grep匹配含关键词的行,不区分大小写 $matchedLines = preg_grep("/{$keyword}/i", $lines); // 输出匹配结果到textarea echo implode("\n", $matchedLines); // 临时文件PHP会在脚本执行完自动删除,无需手动清理 } ?> </textarea> </div> </form> </body> </html>
代码逻辑说明:
- 没有写死任何固定文件路径,动态读取用户上传文件的临时路径
- 不需要把文件存到数据库或者服务器持久化目录,临时文件自动回收
- 符合要求用
preg_grep完成关键词匹配
内容的提问来源于stack exchange,提问作者Ahmad Adamu Jajere
相关产品推荐
相关产品推荐

