PHP快速导出百万级数据到CSV或者EXCEL文件


Posted in PHP onNovember 27, 2020

前言: 很多时候,因为数据统计,我们需要将数据库的数据导出到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易;但是如果对于大数集的导出,将要考虑各种性能的问题,这里以导出数据库一百万条数据为例,导出时间不过20秒,值的学习的一种大数据导出方式。

一、导出思路

  • 需要考虑服务器内存
  • 需要考虑程序运行的最大时间
  • 缺少BOM头导致乱码的处理
  • 如果导出数量过大,推荐使用循环导出,每次循环这里以导出一万条为例,循环100次即可全部导出

二、导出源码

  • 下面源码将数据库信息修改成自己的即可使用
  • 亲测导出一百万条数据,3个字段,不过20秒
  • 如果服务器硬件不支持一次读取一万条数据,可将循环次数提高,导出数量降低
<?php
  //让程序一直运行
  set_time_limit(0);
  //设置程序运行内存
  ini_set('memory_limit', '128M');
 
  $fileName = '测试导出数据';
  header('Content-Encoding: UTF-8');
  header("Content-type:application/vnd.ms-excel;charset=UTF-8");
  header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
  
  //打开php标准输出流
  $fp = fopen('php://output', 'a');
 
  //添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
  fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
  //添加导出标题
  fputcsv($fp, ['姓名', '年龄', '地区']);
  
  //链接数据库
  $dsn = "mysql:host=127.0.0.1;port=3306;dbname=db_www;charset=utf8";
  $pdo = new PDO($dsn, 'root', '');
 
  $step = 100; //循环次数
  $nums = 10000; //每次导出数量
 
  for($i = 0; $i < $step; $i++) {
    $start = $i * 10000;
    $sql = "SELECT uname,age,city FROM `hd_test` ORDER BY `id` LIMIT {$start},{$nums}";
    $pdostatement = $pdo->query($sql);
    $result = $pdostatement->fetchAll(PDO::FETCH_ASSOC);
    foreach ($result as $item) {
      fputcsv($fp, $item);
    }
    //每1万条数据就刷新缓冲区
    ob_flush();
    flush();
  }

三、快速生成百万条测试数据

这里推荐数据库的蠕虫复制命令
先建好表后,插2条测试数据后,执行几次下列命令,即可指数增长

INSERT INTO hd_test (uname,age,city) SELECT uname,age,city FROM hd_test;

到此这篇关于PHP快速导出百万级数据到CSV或者EXCEL文件的文章就介绍到这了,更多相关PHP 导出百万级数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
PHP 函数执行效率的小比较
Oct 17 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
Nov 02 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php自定义函数转换html标签示例
Sep 29 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
Mar 13 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 PHP
php实现通过stomp协议连接ActiveMQ操作示例
Feb 23 PHP
PHP rsa加密解密算法原理解析
Dec 09 PHP
php实现JWT验证的实例教程
Nov 26 #PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 #PHP
PHP扩展安装方法步骤解析
Nov 24 #PHP
Cookie跨域问题解决方案代码示例
Nov 24 #PHP
PHP执行linux命令6个函数代码实例
Nov 24 #PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 #PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 #PHP
You might like
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
php单态设计模式(单例模式)实例
2014/11/18 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
Python yield 使用浅析
2015/05/28 Python
Django实现自定义404,500页面教程
2017/03/26 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
遵纪守法演讲稿
2014/05/23 职场文书
HR求职自荐信范文
2014/06/21 职场文书
2014年副班长工作总结
2014/12/10 职场文书
打架检讨书范文
2015/01/27 职场文书
感恩父母主题班会
2015/08/12 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏