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 09 PHP
php str_pad() 将字符串填充成指定长度的字符串
Feb 23 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
php class类的用法详细总结
Oct 17 PHP
PHP中is_file不能替代file_exists的理由
Mar 04 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 PHP
php实现的一段简单概率相关代码
May 30 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
php文件上传类的分享
Jul 06 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
在python中实现将一张图片剪切成四份的方法
2018/12/05 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
深入解析神经网络从原理到实现
2019/07/26 Python
Python 硬币兑换问题
2019/07/29 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
行政管理毕业生自荐信
2014/02/24 职场文书
合作意向书范本
2014/03/31 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers