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 相关文章推荐
第十四节 命名空间 [14]
Oct 09 PHP
MySQL数据源表结构图示
Jun 05 PHP
PHP define函数的使用说明
Aug 27 PHP
php中长文章分页显示实现代码
Sep 29 PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 PHP
php实现可运算的验证码
Nov 10 PHP
php表单提交实例讲解
Nov 12 PHP
php实现图片按比例截取的方法
Feb 06 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
php中的buffer缓冲区用法分析
May 31 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 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调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
Python对列表排序的方法实例分析
2015/05/16 Python
详解python的几种标准输出重定向方式
2016/08/15 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
python 追踪except信息方式
2020/04/25 Python
python else语句在循环中的运用详解
2020/07/06 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
MySQL面试题目集锦
2016/04/14 面试题
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
酒店司机岗位职责
2013/12/14 职场文书
应届毕业生求职信范例分享
2013/12/17 职场文书
2014年高考决心书
2014/03/11 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
网络管理员岗位职责
2015/02/12 职场文书
博士论文答辩开场白
2015/06/01 职场文书
《正比例》教学反思
2016/02/23 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
JVM之方法返回地址详解
2022/02/28 Java/Android