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 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
解析php中array_merge与array+array的区别
Jun 21 PHP
php中session使用示例
Mar 29 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
隐性调用php程序的方法
Jun 13 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
如何使用PHP给图片加水印
Oct 12 PHP
php 自定义错误日志实例详解
Nov 12 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 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
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
Python的Django框架中的Context使用
2015/07/15 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
Django 用户认证组件使用详解
2019/07/23 Python
Python通过递归获取目录下指定文件代码实例
2019/11/07 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
幼儿园实习生辞职信
2014/01/20 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
银行委托书范本
2014/09/28 职场文书
个人剖析材料范文
2014/09/30 职场文书
教师求职自荐信
2015/03/26 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书