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 修改、增加xml结点属性的实现代码
Oct 22 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
php的ddos攻击解决方法
Jan 08 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
PHP中16个高危函数整理
Sep 19 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
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
JavaScript 空位补零实现代码
2010/02/26 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
JS原型链怎么理解
2016/06/27 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
2019/06/27 Python
python实现倒计时小工具
2019/07/29 Python
python使用建议与技巧分享(一)
2020/08/17 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
英语系毕业生自荐信
2013/10/31 职场文书
新年爱情寄语
2014/04/08 职场文书
给校长的建议书300字
2014/05/16 职场文书
迎国庆演讲稿
2014/09/05 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
农业项目合作意向书
2015/05/08 职场文书
演讲开场白台词大全
2015/05/29 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android