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实现mysql同步的实现方法
Oct 21 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
PHP中文乱码解决方案
Mar 05 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
再谈Yii Framework框架中的事件event原理与应用
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
php下统计用户在线时间的一种尝试
2010/08/26 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
代码生成器 document.write()
2007/04/15 Javascript
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
python中round函数如何使用
2020/06/19 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
就业推荐表自我鉴定
2014/03/21 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
小学社团活动总结
2014/06/27 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
医院营销工作计划
2015/01/16 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS