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 相关文章推荐
PHP4实际应用经验篇(2)
Oct 09 PHP
php自动适应范围的分页代码
Aug 05 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
php 数据结构之链表队列
Oct 17 PHP
实现laravel 插入操作日志到数据库的方法
Oct 11 PHP
设定php简写功能的方法
Nov 28 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
Apr 23 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
正则表达式语法
2006/10/09 Javascript
漂亮但不安全的CTB
2006/10/09 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
JavaScript缓动动画函数的封装方法
2020/11/25 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
Python 自动补全(vim)
2014/11/30 Python
Python反射用法实例简析
2017/12/22 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Django保护敏感信息的方法示例
2019/05/09 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
银行柜员应聘推荐信范文
2013/11/24 职场文书
毕业生求职信范文
2014/06/29 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
同学会感言
2015/07/30 职场文书
安全教育培训制度
2015/08/06 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python