1.    //另外由于excel数据是从数据库里逐步读出然后写入输出流的所以需要将PHP的执行时间设长一点
  2. //(默认30秒)set_time_limit(0)不对PHP执行时间做限制。
  3. set_time_limit(0);
  4. $columns = [
  5. '文章ID', '文章标题', ...... //'openid'
  6. ];
  7. //处理需要导出的数据
  8. $timeStart = strtotime('2018-08-08 00:00:00');
  9. $timeEnd = strtotime('2018-08-08 23:59:59');
  10. $arr = DB::table('t_wechat_user_wx4ed9e1f4e0f3eeb0')->select(DB::raw('distinct openid'))->where('subscribe_time','>=',$timeStart)->where('subscribe_time','<=',$timeEnd);
  11.  
  12. $csvFileName = '8月8号新增粉丝openid.xlsx';
  13. //设置好告诉浏览器要下载excel文件的headers
  14. header('Content-Description: File Transfer');
  15. header('Content-Type: application/vnd.ms-excel');
  16. header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
  17. header('Expires: 0');
  18. header('Cache-Control: must-revalidate');
  19. header('Pragma: public');
  20. $fp = fopen('php://output', 'a');//打开output流
  21. mb_convert_variables('GBK', 'UTF-8', $columns);
  22. fputcsv($fp, $columns);//将数据格式化为CSV格式并写入到output流中
  23. $accessNum = $arr->count();//从数据库获取总量,假设是一百万
  24. $perSize = 1000;//每次查询的条数
  25. $pages = ceil($accessNum / $perSize);
  26. $lastId = 0;
  27. for($i = 1; $i <= $pages; $i++) {
  28. //需要导出的数据
  29. $accessLog = $arr->offset($lastId)->limit($perSize)->get(['openid'])->toArray();
  30. foreach($accessLog as $access) {
  31. $rowData = [
  32. ......//每一行的数据 $access->openid
  33. ];
  34. mb_convert_variables('GBK', 'UTF-8', $rowData);
  35. fputcsv($fp, $rowData);
  36. $lastId ++;
  37. }
  38. unset($accessLog);//释放变量的内存
  39. //刷新输出缓冲到浏览器
  40. ob_flush();
  41. flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
  42. }
  43. fclose($fp);
  44. exit();

相关实时输出:

1. 通过设置实现实时输出

  1. ob_end_flush();//关闭缓存
  2. ob_implicit_flush(true);// TRUE 打开绝对刷送 每次缓存即时输出 相当于每次输出后调用flush()
  3. header('X-Accel-Buffering: no'); //关闭输出缓存

2. 通过 php 语法实现实时输出

  1. $buffer = ini_get('output_buffering');
  2. echo str_repeat(' ',$buffer+); //防止浏览器缓存
  3. ob_end_flush(); //关闭缓存
  4. for( $i=; $i<=; $i++ ){
  5.   echo '第 '.$i.' 次输出.'."<br />\n";
  6.   //flush(); //刷新缓存(直接发送到浏览器)
  7.   sleep();
  8. }
  9. echo '输出完毕';

PHP 实时生成并下载超大数据量的 Excel 文件的更多相关文章

  1. PHP实时生成并下载超大数据量的EXCEL文件

    最近接到一个需求,通过选择的时间段导出对应的用户访问日志到excel中, 由于用户量较大,经常会有导出50万加数据的情况.而常用的PHPexcel包需要把所有数据拿到后才能生成excel, 在面对生成 ...

  2. 【Easyexcel】java导入导出超大数据量的xlsx文件 解决方法

    解决方法: 使用easyexcel解决超大数据量的导入导出xlsx文件 easyexcel最大支持行数 1048576. 官网地址: https://alibaba-easyexcel.github. ...

  3. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])    本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   ...

  4. 数据导出至Excel文件--好库编程网http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm

    using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...

  5. Qt中将QTableView中的数据导出为Excel文件

    如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类 ...

  6. C#将数据集DataSet中的数据导出到EXCEL文件的几种方法

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.W ...

  7. Pl/sql 如何将oracle的表数据导出成excel文件?

    oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...

  8. VB将MSHFlexGrid数据导出到Excel文件通用功能

    1.通用导出Excel功能. 2.将 MSHFlexGrid数据导出到Excel文件通用功能. 3.具体代码如下: '将下列代码保存到一模块文件中,调用方法:Export fgrid1,cd1 Pub ...

  9. 用node.js写一个简单爬虫,并将数据导出为 excel 文件

    引子 最近折腾node,最开始像无头苍蝇一样到处找资料,然而多数没什么卵用,都在瞎比比.在一阵瞎搞后,我来分享一下初步学习node的三个过程: 1 撸一遍NODE入门,对其有个基本的了解: 2 撸一遍 ...

随机推荐

  1. node.js中模块报错【window is not defined】的解决方法

    (function(window) { /* Keep source code the same */ // })(typeof window == "undefined" ? g ...

  2. GNU 和 g++(转)

    百度知道 GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.Richard Stallman最早是在net.unix ...

  3. 9.TOP 子句--mysql limit

    TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. MySQL 语法 SELECT c ...

  4. Oracle——分组函数

    AVG(平均值)和 SUM (合计)函数 可以对数值型数据使用AVG 和 SUM 函数. AVG组函数忽略空值 --在组函数中使用NVL函数 --求平均值 )) MIN(最小值)和 MAX(最大值)函 ...

  5. HttpSession相关API

    //获取Session对象 request.getSession() request.getSession(boolean create) //获取SessionId getId() //获取当前se ...

  6. 黑盒测试实践--Day4 11.28

    黑盒测试实践--Day4 11.28 今天完成任务情况: 分块明确自己部分的工作,并做前期准备 完成被测系统--学生管理系统的需求规格说明书 完成Mook上高级测试课程的第六章在线学习,观看自动化测试 ...

  7. 编写高质量代码改善C#程序的157个建议——建议22:确保集合的线程安全

    建议22:确保集合的线程安全 集合线程安全是指多个线程上添加或删除元素时,线程键必须保持同步. 下面代码模拟了一个线程在迭代过程中,另一个线程对元素进行了删除. class Program { sta ...

  8. ABP源码uml类图

    陆陆续续学习ABP框架有一段时间了,阳光铭睿的入门教程和HK Zhang的源码分析文章对我的学习帮助都很大.之所以会花这么大工夫去学习ABP.看ABP的源代码,一是因为本人对于DDD也非常有兴趣,AB ...

  9. Reporting Service服务SharePoint集成模式安装配置(1、虚拟机+ 2、AD域环境配置)

    研究 Reporting Service SharePoint 集成模式安装有一段时间,最初其实只是想知道Power View 技术是怎么回事,能实现什么效果.(当然也可以通过Excel 配置好 Po ...

  10. ipmitool批量添加新用户名和密码

    Intelligent Platform Management Interface 需求:已知BMC帐号id2为root管理员帐号,添加id5bmc帐号 工具:ipmitool version 1.8 ...