PHP实现xls导入MySQL:从解析到批量写入的完整方案与避坑指南
简介面向需要将电子表格数据批量导入MySQL的PHP开发者这份程序可替代手工录入尤其适合后台管理、报表初始化、数据迁移等场景。包内共四个文件包含三个PHP脚本与一个inc辅助文件压缩后仅13KB结构精简三个PHP脚本分别负责上传交互、xls解析和数据库写入inc文件封装公共函数便于直接部署到现有项目中。程序支持自定义数据库名、表名及字段对应关系读取xls文件后自动写入指定数据表要求表格为xls格式且表头与库表字段严格对应并内置中文编码处理保存时统一使用UTF-8避免乱码。已有276人学习使用代码轻量、逻辑清晰适合PHP开发者作为工具模块嵌入已有系统也可参考其文件解析与数据库写入流程进行二次开发快速适配不同表结构若需要处理日常xls导入任务这份小体积资源能提供即拿即用的基础方案。1. xls导入Mysql(PHP程序)为什么我劝你别再用CtrlC和V搬运表格接手过几个内部系统后我最大的感受是Excel表格往数据库里导看着是个入门活实际翻车率极高。编码乱码、日期变科学计数、空行插进去、数字精度丢了每一条都能让人在凌晨三点怀疑人生。这份PHP程序资源解决的就是这个场景把xls文件交给Web页面上传后自动解析、建表、写入Mysql整个过程不需要装任何桌面客户端浏览器里点两下就完成。适合经常要处理运营导出的数据报表、做数据迁移、或者给非技术同事做自助导入工具的人。它的做法不是简单的CSV中转而是直接读xls二进制结构耐用性比老式解析方案强不少。新手能照着一遍跑通熟手也能从它的边界处理和参数设计里看到可复用的东西。2. 数据导入前的重活先搞懂xls内部结构和PHP侧选型2.1 xls不是文本文件它是一套二进制容器很多第一次做导入的人会拿file_get_contents去读xls然后发现全是乱码。原因很简单xls是OLE2复合文档格式里面分了很多流Stream单元格数据、格式、样式分别存在不同区域直接用字符串方式读等于把PDF当TXT打开。常见做法是引入专门的解析库让库去处理Workbook、Sheet、Cell这些层级PHP侧只需要关心读出来的数组。// 伪代码示意xls解析的常规入口写法 $spreadsheet \PhpOffice\PhpSpreadsheet\IOFactory::load($uploadedFilePath); $sheet $spreadsheet-getActiveSheet(); $rows $sheet-toArray(null, true, true, true);这段代码里IOFactory::load会根据文件扩展名自动选择解析器xls走老格式解析器xlsx走XML解析器。toArray的第三个参数true表示返回带单元格坐标的关联数组第四个参数true表示空单元格也保留占位这两个参数在后续逐行检查时非常省事。需要注意的一个坑如果只是临时导一次数据不推荐用这个重量级库它的依赖多、内存占用高对小数据量反而是负担。2.2 解析库怎么挑三个硬性指标挑xls解析库不能只看下载量我一般按三个硬指标筛一是能否读取老式xlsBIFF5/BIFF8格式很多只有xlsx能力的库在旧文件上直接崩二是内存峰值是否可控默认全部加载进内存的库在处理5万行以上时会让PHP直接OOM三是能否保留单元格数据类型这是后续写库时避免数字变字符串的关键。市面上常见的方案中PhpSpreadsheet功能最全但性能偏重纯PHP的老牌类库解析快但对新格式支持弱。这份资源里选的是轻量路线直接解析xls的二进制结构不依赖Composer全家桶部署到虚拟主机上也能跑。2.3 上传环节的参数设计限制不是刁难用户是保护数据库上传表单里除了文件框必须有三个隐藏参数允许的MIME类型、最大文件大小、目标表名。MIME限制要写application/vnd.ms-excel和application/octet-stream两种因为不同浏览器给xls文件的Content-Type不一样。大小限制建议写在PHP配置和代码里双重校验因为$_FILES里的size字段可以伪造但服务端读到的实际字节数骗不了人。// 上传参数校验的常规写法 $allowedMime [application/vnd.ms-excel, application/octet-stream]; $maxSize 5 * 1024 * 1024; // 5MB if (!in_array($_FILES[xls_file][type], $allowedMime)) { exit(文件类型不允许); } if ($_FILES[xls_file][size] $maxSize) { exit(文件超过5MB限制); }这里有个隐藏逻辑只校验MIME不够还得用getimagesize或finfo_open去读文件头因为改个扩展名就能绕过浏览器端检查。finfo返回的实际文件类型如果既不是xls也不是zipxlsx本质是zip包直接拒绝是最安全的。文件大小限制5MB看似保守实际上对应的是单次导入行数红线超出这个量应该让用户拆文件而不是调大限制硬扛。3. 从xls到Mysql表的映射策略列名、字段类型与容错机制3.1 第一行是表头还是数据这个决定影响整张表结构导入逻辑里最需要先定的规则是第一行怎么处理。常见做法是默认第一行为表头自动作为Mysql字段名但如果表头里带空格、括号、百分号这些字符在Mysql字段名里全不合法。我的处理方案是写一个字段名清洗函数统一转小写、空格换下划线、去掉所有非字母数字下划线的字符再加上前缀避免保留字冲突。// 字段名清洗的实用写法 function cleanFieldName($rawName) { $name strtolower(trim($rawName)); $name preg_replace(/[\s]/, _, $name); $name preg_replace(/[^a-z0-9_]/, , $name); if (!preg_match(/^[a-z]/, $name)) { $name col_ . $name; } return $name; }这段代码的边界处理能省掉很多后顾之忧。preg_replace的第二个替换规则把所有非法字符直接删掉而不是替换成别的避免出现连续下划线如果清洗后字段名以数字开头自动加col_前缀这是Mysql字段名必须遵守的语法。还有一个细节列名重复时要在后面拼序号否则建表语句直接报Duplicate column name。3.2 类型推断别让所有列都变成VARCHAR(255)很多人图省事所有字段一律varchar(255)短时间没毛病但数据量上来后查询慢、排序乱、聚合函数用不了。正确做法是采样前N行做类型推断全部能转成整数的列设为int能转成浮点数的设为decimal能解析成日期的设为date其余才落为varchar。采样行数我一般取100行太多影响速度太少推断不准。// 简易类型推断逻辑 function inferFieldType($sampleRows, $colIndex) { $allInt true; $allFloat true; $allDate true; foreach ($sampleRows as $row) { $val $row[$colIndex] ?? ; if ($val ) continue; // 跳过空值 if (!preg_match(/^-?\d$/, $val)) $allInt false; if (!is_numeric($val)) $allFloat false; if (!strtotime($val)) $allDate false; } if ($allInt) return INT; if ($allFloat) return DECIMAL(20,6); if ($allDate) return DATE; return VARCHAR(255); }这段推断逻辑的巧妙之处在于用一个空值跳过规则解决了很多Excel表格里空行导致误判的问题。DECIMAL固定20,6是保守选择整数部分14位足够绝大多数业务场景小数部分6位也够精度。注意strtotime判断日期有个坑它会把很多纯数字识别成时间戳比如2024会被当成时间戳处理所以推断前最好增加一个长度检查。3.3 特殊单元格的预处理日期、百分比、超长文本Excel里的日期在xls内部存储时是浮点数直接读出来是43000多这种数字必须做转换。常见做法是判断单元格格式是否为日期格式再调用库的格式化方法输出成标准字符串。百分比单元格更坑存储在底层就是0.25这种小数但显示成25%导入数据库时到底存哪个值要看业务需求。我的做法是建立一个映射表根据原始格式信息判断是否需要放大100倍。超长文本是另一个暗坑。Excel单元格最多容纳32767个字符但Mysql的varchar(255)装不下text类型上限65535字节又不够保险遇到这种情况我会主动把该列升级为mediumtext。这个决定不需要用户干预代码里检测到某列样本值超过500字符就自动升级宁可用更大的存储类型也不要让导入中途报Data too long。4. 核心落地把解析结果分批写入Mysql并处理事务边界4.1 建表SQL的动态生成注意字符集与引擎选择拿到清洗后的字段名和推断出的类型后下一步是拼建表语句。字符集这里必须固定utf8mb4不要用utf8因为utf8在Mysql里实际是utf8mb3存不了emoji和生僻字。引擎我一般选InnoDB虽然比MyISAM慢一点但行级锁和事务支持在数据导入场景里更稳中途出错还能回滚。// 动态建表的核心片段 $fields []; foreach ($cleanColumns as $idx $colName) { $type $inferredTypes[$idx]; $fields[] {$colName} {$type}; } $sql CREATE TABLE {$tableName} ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, . implode(,\n, $fields) . ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;建表时额外加一个自增主键id是实战经验。如果表单里没有唯一键加自增主键能保证行级别操作的可回溯性如果导入的数据本身有主键后续要做去重或更新操作也方便。还有一个细节字段名全部用反引号包裹防止字段名叫rank、group、order这些Mysql保留字时建表直接失败。4.2 批量插入的参数选择一次插多少行才算合适逐行INSERT是一条一条请求数据库网络往返和SQL解析开销巨大1万行数据可能要跑几分钟。批量插入能百倍提速但也不是越大越好超过一定行数后SQL语句太长Mysql的max_allowed_packet默认4MB会爆掉。我习惯把批大小设置在200到500行之间再配合预处理语句占位符复用执行计划。// PDO预处理批量插入的写法 $pdo-beginTransaction(); $stmt $pdo-prepare(INSERT INTO {$tableName} ( . $placeholders . ) VALUES ( . $valueHolders . )); foreach ($rows as $row) { $stmt-execute($row); } $pdo-commit();这段代码的关键是prepare一次、execute多次PDO会复用同一个解析计划省掉了每条SQL重复解析的开销。事务包裹整批写入的意义在于如果第300行发现数据格式错误执行rollback后整批不落库不会留下半截数据。我一般在1万行以上数据才考虑分批提交每批500行提交一次避免长事务锁表影响其他查询。4.3 行级异常处理遇到脏数据是跳过还是中止这是导入工具设计里最需要想清楚的问题。全部跳过会让用户拿到一个不完整的数据表全部中止又会让一个烂数据卡住整批活。我见过最合理的方案是双轨制字段缺失或类型不符的脏行跳过并记录日志主键冲突的行单独存到一个错误表里导入完成后输出一个统计报告让用户决定怎么处理错误行。// 记录错误行的实用做法 $errorRows []; foreach ($rows as $rowNum $row) { try { $stmt-execute($row); } catch (PDOException $e) { $errorRows[] [row $rowNum 2, msg $e-getMessage()]; } }这里有个容易被忽略的细节try-catch放在循环内部会频繁切换执行上下文性能损耗不小。更好的做法是把数据先经过校验阶段过滤掉明显错误再走批量写入只有真正写入时才用异常捕获兜底。错误行记录的行号要加2才是Excel里的实际行号因为第一行是表头数组索引从0开始。5. 实战避坑xls导入Mysql的常见问题排查手册5.1 中文乱码文件是ANSI编码但PHP默认读UTF-8现象是导入后发现所有中文变成问号或者一串乱码。原因是老版本Excel保存xls文件时中文区域默认使用GBK编码而PHP文件流读取时按UTF-8解析两个字符集不对位中文字符自然全废。解决方法是读取文件内容时先检测编码再用iconv转码。这里要特别提醒不要在源文件上直接改编码而是让程序在解析前做内容级转换。// 通用编码检测与转换写法 $content file_get_contents($xlsPath); $encoding mb_detect_encoding($content, [GBK, GB2312, UTF-8]); if ($encoding $encoding ! UTF-8) { $content mb_convert_encoding($content, UTF-8, $encoding); }这段代码放在解析前执行的逻辑是要点。mb_detect_encoding按优先级数组检测GBK在前是因为它兼容GB2312检测结果不会误判。但要注意mb_detect_encoding在纯ASCII内容上会返回false所以判断要用$encoding 否则默认当UTF-8处理也没问题。这个坑在导入用户手工填写的Excel时出现频率最高因为他们常常从老系统导出文件编码五花八门。5.2 数字精度丢失Excel浮点数与Mysql Decimal的账现象是导入后手机号变成1.38E10或者18位身份证后几位全变成0。原因是Excel内部数字以IEEE 754浮点数存储超过15位有效数字的整数在底层已经失真读出来再转回整数也救不回来。这不算PHP的错是Excel存储机制的天生缺陷。解决方法只有一个在Excel源文件里把这类列设置成文本格式再导出xls。如果你拿到的文件已经变成了科学计数法也不是完全没救。常见的处理方法是读取单元格后再按原始格式字符串尝试还原Excel在xls里其实保存了两种表示显示值和底层值解析库提供getFormattedValue能拿到人眼看到的那个字符串。我在代码里会优先使用格式化值而不是原始值就是吃透了这一点。5.3 Excel里带公式的单元格读出来是0现象是某些列的值全为0但用户在Excel里看着是有数字的。原因是单元格存的是公式而不是计算结果解析库默认读的是公式字符串或缓存值。老版本Excel的xls文件里缓存值不一定存在很多情况下读到的是空或者0。解决方法是判断单元格是否isFormula如果是要么用计算引擎重算要么直接跳过该列并在日志里警告。// 判断单元格是否为公式的写法 if ($cell-isFormula()) { $calculated $cell-getCalculatedValue(); $cellValue $calculated ! null ? $calculated : $cell-getOldCalculatedValue(); }这里有个玄学问题getCalculatedValue触发引擎重算非常慢一个带几万个公式的文件能把导入时间拖长几十倍。我的经验是能不用就不用优先读缓存值getOldCalculatedValue只有缓存不存在时才走重算。这个方案的本质是跟时间和性能做平衡不是所有公式都需要精确值。5.4 连续空行导致表结构错乱现象是导入后的数据表里突然多了一整行空值或者表格中间出现断档。原因是Excel里用户习惯性敲了几行空行toArray方法默认保留了这些空行建表时把空行当数据写进去了。解决方法是写入前过滤连续空行判断标准是整行所有有效字段都是空字符串。// 空行判断的可靠写法 function isRowEmpty($row) { foreach ($row as $val) { if ($val ! null $val ! ) return false; } return true; }这里容易犯的错是只用array_filter去空值但Excel单元格里可能有空格字符空格不等于空。所以判断里要先把字符串trim掉再检查最好连不可见字符\u00A0也处理掉。过滤空行的位置应该在字段名清洗之后、类型推断之前否则空行会影响字段类型推断结果。5.5 目标表已存在时是覆盖还是追加现象是二次导入同一份文件数据翻倍或者直接报错说表已存在。原因是导入工具没有做好表存在的处理策略。我建议设计三种模式在下拉框里让用户选新建表、清空重导、追加写入。新建表时表名要加时间戳或随机后缀清空重导执行TRUNCATE再写入追加则跳过建表逻辑直接插入数据。三种模式对应三种业务场景一个默认值选新建表最安全。6. 导入后的自检动作三个验证脚本让数据不再裸奔导入完成不等于事情结束我习惯在每次导入后强制跑三个验证这三个脚本能过滤掉绝大多数脏数据而且完全可以封装成PHP命令行工具反复使用。第一个验证是行数对比解析文件时的总行数排除表头与Mysql里的COUNT(*)必须一致行数对不上说明导入过程丢了数据需要查日志定位。第二个验证是抽样值对比从源文件随机抽20行和数据库对应行的值做精确比对抽查能发现编码转换错误、精度丢失这类全量检查发现不了的问题。第三个是空值率检查每个字段统计NULL和空字符串的比例超过预期阈值就报警。// 行数对比验证的简易实现 $parsedCount count($rows) - 1; // 减掉表头 $dbCount $pdo-query(SELECT COUNT(*) FROM {$tableName})-fetchColumn(); if ($parsedCount ! (int)$dbCount) { error_log(行数不一致解析{$parsedCount}行写入{$dbCount}行); // 进一步定位缺失范围 }这类验证脚本的价值在于让导入工具从黑匣子变成透明流程用户导入完心里有底。我一开始做导入工具时完全没做验证导致一次数据迁移漏了几百行没发现业务部门跑数时结果对不上查了两天才定位到是导入丢了数据。从那以后我每次写完导入功能都强制走一遍行数对比、抽样比对、空值率三个验证确认全过了才交付。这套流程看起来不起眼但确实救过我好几次希望帮到你。本文还有配套的精品资源点击获取

相关新闻

信呼OA系统部署实战:自定义表单与流程引擎改造避坑指南

信呼OA系统部署实战:自定义表单与流程引擎改造避坑指南

简介:信呼协同办公OA系统v1.9.1是一套开源的企业办公自动化源码,面向需要快速搭建内部协同平台的各类企事业单位,也适合PHP开发者和OA二次开发人员学习参考。该版本主要整合日程管理、任务分配、文件共享、即时通讯、审批流程、考勤管理等常用…

2026/10/11 8:37:54 阅读更多 →
环境依赖对比:Playwright MCP 服务器的轻量依赖 vs 高层级方案的复杂组件要求|TaoToken 统一 Key 通道实践

环境依赖对比:Playwright MCP 服务器的轻量依赖 vs 高层级方案的复杂组件要求|TaoToken 统一 Key 通道实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 8:38:16 阅读更多 →
Vue项目中ECharts动态地图实现与性能优化实战

Vue项目中ECharts动态地图实现与性能优化实战

1. 为什么要在 Vue 项目里折腾动态地图先说说这个需求的来龙去脉。很多做后台管理系统或者数据大屏的朋友,都会遇到一个绕不开的场景:需要在页面上展示一张中国地图或者某个省份的地图,而且这张地图不是静态图片,它得能根据后端返…

2026/10/11 8:37:00 阅读更多 →

最新新闻

解决macOS“无法检查恶意软件”提示:Gatekeeper原理与安全放行指南

解决macOS“无法检查恶意软件”提示:Gatekeeper原理与安全放行指南

碰到这类问题的朋友应该不少:好不容易从官网或者某个技术社区下载了一款工具,双击一启动,macOS 直接甩出一行冷冰冰的提示——无法打开“某App”,因为Apple无法检查其是否包含恶意软件。我第一次遇到它是在帮同事处理一台旧 MacBo…

2026/10/11 12:51:38 阅读更多 →
如何为文档站托管MCP服务器:Blume让Claude Code与Cursor直接检索你的文档

如何为文档站托管MCP服务器:Blume让Claude Code与Cursor直接检索你的文档

【免费下载链接】blume The open-source docs framework for humans and agents. 项目地址: https://gitcode.com/gh_mirrors/blum/blume 点击查看 免费下载 Blume 是一个开源文档框架(The open-source docs framework for humans and agents&#xff0…

2026/10/11 12:51:38 阅读更多 →
一款边录边标注的轻量截图录屏工具

一款边录边标注的轻量截图录屏工具

今天推荐一款面向 Windows 平台的截图录屏软件,适合经常需要做屏幕演示、录教程、做讲解视频的用户。它最大的特点是支持 录制时实时标注,可以在屏幕上直接划线、圈重点、添加箭头或打码,让演示过程更清晰。 推荐指数:★★★★★…

2026/10/11 12:51:38 阅读更多 →
Aptana Studio 3.0汉化包安装全攻略:直接覆盖、参数配置与故障排查

Aptana Studio 3.0汉化包安装全攻略:直接覆盖、参数配置与故障排查

简介:针对Aptana Studio 3.0中文用户及Web开发者的汉化语言资源包,解决官方版界面以英文呈现、菜单和提示影响上手效率的问题。资源共247个文件,核心是241个基于Eclipse平台的本地化jar语言包,另含少量html说明、xml配置、propert…

2026/10/11 12:51:38 阅读更多 →
杭州拱墅区在哪里办宽带最便宜 亚平宽带地址覆盖与装机流程解析

杭州拱墅区在哪里办宽带最便宜 亚平宽带地址覆盖与装机流程解析

杭州拱墅区在哪里办宽带最便宜 亚平宽带地址覆盖与装机流程解析 核心要点 在拱墅区办理宽带,应同时比较带宽、套餐周期、安装调测费、光猫和后续服务。 常见方式包括亚平宽带线上办理、运营商官方渠道以及线下营业厅和社区服务点。 亚平宽带获得中国联通、中国电信、…

2026/10/11 12:51:38 阅读更多 →
ESP32-S3智能AI交互装置开发实战:从硬件选型到语音唤醒与云端对话

ESP32-S3智能AI交互装置开发实战:从硬件选型到语音唤醒与云端对话

1. 从标题说起:这个项目到底在做什么“ESP32S3智能AI炸弹”这个标题第一次看到的时候,我承认我愣了一下。不是因为技术难度,而是这个名字起得实在太有冲击力了。但如果你是一个玩过ESP32系列开发板的嵌入式爱好者,大概率能猜到这背…

2026/10/11 12:50:37 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →