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程序中的常见漏洞进行攻击(下)
Oct 09 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
Symfony2学习笔记之系统路由详解
Mar 17 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
php常用日期时间函数实例小结
Jul 04 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
php中yii框架实例用法
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
zf框架的数据库追踪器使用示例
2014/03/13 PHP
php实现的日历程序
2015/06/18 PHP
Symfony生成二维码的方法
2016/02/04 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
JavaScript入门基础
2015/08/12 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
Javascript 编码约定(编码规范)
2018/03/11 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
详解python Todo清单实战
2018/11/01 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
教师自我评价范例
2013/09/24 职场文书
办公室内勤工作职责
2013/12/11 职场文书
大学军训感言200字
2014/02/26 职场文书
中学生寄语大全
2014/04/03 职场文书
公民授权委托书
2014/10/15 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
降价通知函
2015/04/23 职场文书
朋友离别感言
2015/08/04 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python