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的FTP学习(四)
Oct 09 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
精通php的十大要点(上)
Feb 04 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
Oct 25 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
PHP使用HTML5 FormData对象提交表单操作示例
Jul 02 PHP
php swoft框架实例用法
Dec 22 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下一个非常全面获取图象信息的函数
2008/11/20 PHP
php $_SERVER当前完整url的写法
2009/11/12 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP实现简易图形计算器
2020/08/28 PHP
input 高级限制级用法
2009/03/26 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
js实现转动骰子模型
2019/10/24 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
详解python上传文件和字符到PHP服务器
2017/11/24 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
Python 删除List元素的三种方法remove、pop、del
2020/11/16 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
财务会计自荐信范文
2014/02/21 职场文书
父母寄语大全
2014/04/12 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
大学生团员个人总结
2015/02/14 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
小型婚礼主持词
2015/06/30 职场文书
python 实现的截屏工具
2021/05/08 Python
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang