导入 5000 条订阅名单,系统提示成功 5320 条,比文件多了 320 条,列表里出现一堆只有半截的地址,还有一个字段写着「张先生」。日志里能对上时间点,这种反而好排。
导入代码用 explode 按逗号切每一行,没处理双引号包裹的字段,备注里带逗号时整行被多切一刀,后半段当成新记录入库。这一点先确认清楚,后面就不用反复试。
$fh = fopen('list.csv', 'r');
while (($row = fgetcsv($fh)) !== false) { /* 按列取值 */ }
这次卡住的地方就在「CSV 引号字段」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
处理上按这个顺序:改用 fgetcsv 或 Python 的 csv 模块解析,引号和换行都交给它处理;导入前先按表头校验列数,列数不对的整行跳过并记录行号;导入完成核对条数和文件行数,差值不为零就回滚。
结果对不对很好判断,导入条数和文件数据行数完全一致,列表里不再出现半截邮箱。
