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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
NO3第三帝国留言簿制作过程
Oct 09 PHP
关于PHP5 Session生命周期介绍
Mar 02 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
php实现简易聊天室应用代码
Sep 23 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
详解php中的implements 使用
Jun 13 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
Dec 04 PHP
通过PHP实现获取访问用户IP
May 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
Laravel框架查询构造器简单示例
2019/05/08 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
python简单获取数组元素个数的方法
2015/07/13 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
python发送邮件功能实现代码
2016/07/15 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
pytorch打印网络结构的实例
2019/08/19 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
python标识符命名规范原理解析
2020/01/10 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
Python csv文件记录流程代码解析
2020/07/16 Python
Python self用法详解
2020/11/28 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
个人自我评价和职业目标
2014/01/24 职场文书
2014年医院工作总结
2014/11/20 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
员工安全责任协议书
2016/03/22 职场文书