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 fsockopen写的HTTP下载的类
Feb 22 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php加密解密实用类分享
Jan 07 PHP
memcache命令启动参数中文解释
Jan 13 PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
Oct 19 PHP
Laravel如何使用Redis共享Session
Feb 23 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和ACCESS写聊天室(九)
2006/10/09 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
Python pip 常用命令汇总
2020/10/19 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
网络安全方面的面试题
2016/01/07 面试题
软件设计的目标是什么
2016/12/04 面试题
laravel使用redis队列实例讲解
2021/03/23 PHP
超市食品安全承诺书
2015/04/29 职场文书
法律进社区活动总结
2015/05/07 职场文书
建议书的格式及范文
2015/09/14 职场文书
创业计划书之宠物店
2019/09/19 职场文书