讲师中心 微信公众号
AI工具推荐 视频效率加速

大文件导出导致超时?TP5.1 使用 CSV 流式输出避免内存溢出【Excel】

小枫吖_7245

小枫吖_7245

发布时间:2026-07-10 15:36:24

|

160人浏览过

|

来源于php中文网

原创

TP5.1大数据导出必须用cursor()流式查询+手动fputcsv输出CSV,禁用Db::select()和Excel导出。需输出BOM、正确响应头、清缓冲、显式字段、过滤大字段,并严格控制字段顺序与空值处理。

大文件导出导致超时?tp5.1 使用 csv 流式输出避免内存溢出【excel】

超时不是 PHP 配置没调够,而是你还在用 Db::select() 查完再导 —— 这种写法在 TP5.1 里必然卡死或超时,必须切到游标流式输出。

为什么 TP5.1 的 cursor() 是唯一靠谱路径

TP5.1 不支持原生 PDOStatement 流式 fetch,但提供了 cursor() 方法,底层调用的是 PDO 的 fetch(PDO::FETCH_ASSOC),每行只占几 KB 内存,10 万行也稳定在 5–8 MB。它不走 ORM 实例化,绕过模型层和自动类型转换,避免 blob 字段反序列化吃光内存。

  • cursor() 不支持 limit() 和 page(),分页得靠 SQL 条件:比如 where('id > ?', $lastId) + order by id
  • 必须显式指定字段:field('id,name,email,created_at'),否则 * 可能触发额外元数据查询,破坏流稳定性
  • 含 text 或 json 字段时,加 withoutField('content') 过滤掉,防止大字段被自动转字符串塞进内存

导出 CSV 必须写的三行头 + 两行清理

缺任何一行,Excel 打开中文就是乱码、文件损坏或下载失败。

图片转Excel
图片转Excel

从图片中提取表格数据并生成Excel文件。当用户提供截图、照片或扫描件中的表格数据,要求转成Excel/xlsx时触发。支持多张图片批量提取,自动识别列结构,数值类型自动识别(Excel可直接计算)。触发词:图片转Excel、截图转表格、图片提取数据、图片转xlsx、image to xlsx、screenshot to spreadsheet。

下载
  • 开头必须输出 BOM:echo "\xEF\xBB\xBF";,否则 Windows Excel 默认用 GBK 解码 UTF-8 中文
  • 响应头要全且顺序不能错:header('Content-Type: text/csv; charset=utf-8');、header('Content-Disposition: attachment; filename="export.csv"');、header('Cache-Control: no-cache');
  • 输出前必须清缓冲:ob_end_clean();,否则框架输出的空白、debug 信息会混入 CSV 开头,导致 Excel 无法识别
  • 写完后必须 fclose($output),否则部分 Nginx 配置下响应体不完整

fputcsv() 比框架封装更稳,但要注意字段顺序和空值

TP5 自带的 exportCsv() 封装会自动加引号、转义换行符,但字段顺序不可控、空值处理不一致;而原生 fputcsv() 把控制权交还给你。

  • 表头和数据行字段顺序必须严格一致,否则列对不上 —— 建议把字段名数组存成常量复用
  • null 和空字符串 '' 都会被 fputcsv() 写成空单元格,业务上需提前转成 'NULL' 或 'N/A'
  • 字段含逗号、换行符、双引号时,fputcsv() 自动加引号并转义,不用手动处理
  • 别用 str_putcsv() 拼字符串 —— 它不处理引号转义,CSV 格式极易崩

别碰 Excel,除非真需要公式或样式

TP5.1 里强行导 .xlsx 就是给自己设障:PhpSpreadsheet 写入 1 万行 ≈ 占 200MB 内存,且 fromArray() 分块写入仍需缓存整张 sheet 对象。如果只是“看起来像 Excel”,CSV + 后缀改 .xlsx 是最省事的伪装方案。

  • 真要 Excel,必须禁用计算引擎:$spreadsheet->setCalculationEngine(new \PhpOffice\PhpSpreadsheet\Calculation\Calculation());,否则含公式的模板一打开就卡死
  • 禁止逐单元格赋值:$sheet->setCellValue('A'.$row, $val),改用 fromArray($chunk, null, 'A2') 批量写入
  • 每 500 行调一次 ob_flush(),最后才 $writer->save('php://output'),否则缓冲区撑爆

真正难的不是写代码,是判断该不该导 Excel —— 大多数所谓“需要 Excel”的需求,其实只要 CSV 能打开、能排序、能筛选就够了。一旦选错格式路径,后面全是救火。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
excel对比两列数据异同
excel对比两列数据异同

Excel作为数据的小型载体,在日常工作中经常会遇到需要核对两列数据的情况,本专题为大家提供excel对比两列数据异同相关的文章,大家可以免费体验。

5281

2023.07.25

excel重复项筛选标色
excel重复项筛选标色

excel的重复项筛选标色功能使我们能够快速找到和处理数据中的重复值。本专题为大家提供excel重复项筛选标色的相关的文章、下载、课程内容,供大家免费下载体验。

3276

2023.07.31

excel复制表格怎么复制出来和原来一样大
excel复制表格怎么复制出来和原来一样大

本专题为大家带来excel复制表格怎么复制出来和原来一样大相关文章,帮助大家解决问题。

3060

2023.08.02

excel表格斜线一分为二
excel表格斜线一分为二

在Excel表格中,我们可以使用斜线将单元格一分为二。本专题为大家带来excel表格斜线一分为二怎么弄的相关文章,希望可以帮到大家。

1444

2023.08.02

excel斜线表头一分为二
excel斜线表头一分为二

excel斜线表头一分为二的方法有使用合并单元格功能方法、使用文本框功能方法、使用自定义格式方法。本专题为大家提供excel斜线表头一分为二相关的各种文章、以及下载和课程。

697

2023.08.02

绝对引用的输入方法
绝对引用的输入方法

绝对引用允许在公式中引用一个固定的单元格,而不会随着公式的复制和粘贴而改变引用的单元格。本专题为大家提供绝对引用相关内容的文章,大家可以免费体验。

5148

2023.08.09

java导出excel
java导出excel

在Java中,我们可以使用Apache POI库来导出Excel文件。本专题提供java导出excel的相关文章,大家可以免费体验。

6923

2023.08.18

excel输入值非法
excel输入值非法

在Excel中,当输入的数值非法时,有以下多种处理方法。本专题为大家提供excel输入值非法的相关文章,大家可以免费体验。

1721

2023.08.18

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

40

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 44.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn