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大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
php中Smarty模板初体验
Aug 08 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php实现的简单日志写入函数
Mar 31 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
CI框架集成Smarty的方法分析
May 17 PHP
Laravel中间件实现原理详解
Oct 09 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
Apr 27 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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
PHPMyAdmin 快速配置方法
2009/05/11 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
详解Vue方法与事件
2017/03/09 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
python 导入数据及作图的实现
2019/12/03 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
外贸实习生自荐信范文
2013/11/24 职场文书
区三好学生主要事迹
2014/01/30 职场文书
推广活动策划方案
2014/08/23 职场文书
2014离婚协议书范文
2014/09/10 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
小学教师教学反思
2016/02/24 职场文书
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis