对于做后台开发的码农来说,从excel导入数据到数据库亦或者是从数据库导出数据到excel都是很常见的操作。由于经常遇到这样的场景,也因为从数据库导出数据到表格所遇到的坑有很多,所以需要另辟途径来进行这种场景优化。

如果是小量的数据导出到excel的表格的话,一般不会有太多效率和资源占用的问题,但是当数据量变得庞大了,例如20万或者50万的时候就会造成PHP处理的瓶颈,要么内存溢出要么脚本运行超时。当然PHP是相对于比较灵活的,大可在方法运行的时候单独更改超时时间和脚本运行内存。但是这都是于事无补的,一般xls的格式最大支持六万行的数据左右,所以到了六万行的时候就凉凉了。

后续查阅资料发现csv是可以支持无限行数的,只要你的电脑能支持打开就能不断的往里面塞数据。

CSV格式文件最大行数是没有上限的,在国外科学数据网站下载的CSV文件有几十G上百G,行数多大几十亿上百亿行;但是大文件CSV打开编辑的软件就基本没有,Excel、wps、openoffice紧支持打开编辑前面1048576行;snapde软件支持的行数多一些,一次可以打开编辑一两千万行的CSV数据,速度超快。

代码

<?php
public function exportWarehouseManagementToExcel()
{
ini_set('max_execution_time', 300);// 设置PHP超时时间
ini_set('memory_limit', '2048M');// 设置PHP临时允许内存大小
$querySql = "SELECT * FROM fsyz_cpInventory WHERE 1=1";//导出所有的数据
$queryResult = $this->db->query($querySql)->result_array(); //路径
$fileName = '车管驻点业务寄递仓库管理所有数据' . date('Ymd_His') . '.csv';
$filePath = 'excel/' . $fileName;
$index = 0;
$fp = fopen($filePath, 'w'); //生成临时文件
chmod($filePath, 0777);//修改可执行权限
// 将数据通过fputcsv写到文件句柄
$header = array('车牌号码', '车牌类型', '所在区域', '状态', '入库时间');//设置表头
fputcsv($fp, $header);
//处理导出数据
foreach ($queryResult as $key => &$val) {
foreach ($val as $k => $v) {
$val[$k] = $v . "\t";
if ($index == 10000) { //每次写入1000条数据清除内存
$index = 0;
ob_flush();//清除内存
flush();
}
$index++;
}
fputcsv($fp, $val);
}
ob_flush();
fclose($fp); //关闭句柄
header("Cache-Control: max-age=0");
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename=' . basename($fileName));
header("Content-Type: text/csv");
header("Content-Transfer-Encoding: binary");
header('Content-Length: ' . filesize($filePath));
@readfile($filePath);//输出文件;
unlink($filePath); //删除压缩包临时文件
echo $filePath;
return;
}

转载:

https://199508.com/post/2064

PHP导出大量数据到csv表的更多相关文章

  1. Hive导出复杂数据到csv文件

    工作中经常遇到使用Hive导出数据到文本文件供数据分析时使用.Hive导出复杂数据到csv等文本文件时,有时会遇到以下几个问题: 导出的数据只有数据没有列名. 导出的数据比较复杂时,如字符串内包含一些 ...

  2. php导出百万数据到csv

    <?php set_time_limit(0); // 设置超时 ini_set('memory_limit', '100M'); // 设置最大使用的内存 header("Conte ...

  3. angular6 导出json数据到excal表

    1 首先使用npm下载插件依赖的安装包   npm install file-saver --save   npm install xlsx --save   2 引入项目中的ts文件中   impo ...

  4. 导出大量数据到excel表

    set_time_limit(0);error_reporting(0); // 输出Excel文件头,可把user.csv换成你要的文件名header('Content-Type: applicat ...

  5. 导出数据库数据到Excel表

    后台需要将用户信息数据导入到Excel表中提供给相关人员: 首先查询数据就不多说了: 导入Excel表直接亮代码(采用的是jxl的jar包提供的方法): public static File Impo ...

  6. 【shell mysql 导出数据到csv脚本,完美解决乱码转义符等问题】-费元星

    #!/bin/bash#@author:feiyuanxing [既然笨到家,就要努力到家]#@date:2017-12-05#@E-Mail:feiyuanxing@gmail.com#@TARGE ...

  7. Mysql 只导出数据,不包含表结构

    mysqldump -u${user} -p${passwd} --no-create-info --database ${dbname} --table ${tablename} > ${ta ...

  8. C#导出数据到CSV和EXCEL文件时数字文本被转义的解决方法

    今天写C#导出datagrid数据到csv格式文件的时候,发现不管怎么尝试,凡是单元格里面全是数字的单元格,在用Excel打开的时候,都被自动转义成数据格式.数据查看极其不方便.最后google了一下 ...

  9. oralce 超过1亿条数据的数据库表清理实践

    2018-08-18 16:58 无腿鸟 阅读(331) 评论(0) 编辑 收藏 问题:当一个表的数据量超过一亿条,要删除其中的5000w条,如何处理. 如果直接使用delete语句,会涉及到到大量的 ...

随机推荐

  1. [NOIP模拟20]题解

    来自达哥的问候…… A.周 究级难题,完全不可做QAQ #include<cstdio> #include<iostream> #include<cstring> ...

  2. 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存在影响

    原文地址 背景 开发过程中遇到问题,简单写个demo 运行环境为Chrome 68 描述一下这个问题,当a标签内部存在嵌套时, 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存 ...

  3. LCA 总结

    代码: //RMQ求LCA struct node { int v, w; }; class LCA { private: vector<int>dep, pos, olx, dis; v ...

  4. Vue&webpack入门实践

    目录 1. 下载安装Vue 2. Vue 2.1 Vue要素 2.2 指令 2.3 组件化 2.4 vue-router 3. webpack 3.1 webpack简介 3.2 四个核心概念 3.3 ...

  5. Asp.Net Core 第05局:读取配置

    前言 本文介绍Asp.Net Core 读取配置文件. 环境 1.Visual Studio 2017 2.Asp.Net Core 2.2 开局 前期准备             1.添加app.j ...

  6. mongo 慢查询配置

    我是分片部署,所以慢查询相关的配置是在启动片服务上. 执行查询命令,是在share的primary 上. 1. mongodb慢查询   配置 慢查询数据主要存储在 local库的system.pro ...

  7. swoole 多进程共享数据

    进程作为程序执行过程中资源分配的基本单位,拥有独立的地址空间,同一进程的线程可以共享本进程的全局变量,静态变量等数据和地址空间,但进程之间资源相互独立.由于PHP语言不支持多线程,因此Swoole使用 ...

  8. HTML版简历

    页面预览 在线演示

  9. 嵌入式C语言3.2 关键字---自定义数据类型

    1. struct 结构体 基本语法 struct myabc{ unsigned int a; unsigned int b; unsigned int c; unsigned int d; } 调 ...

  10. 爬虫-ajax请求遇到Unicode编码问题

    2018-08--4爬取金色财经网页 网址:https://www.jinse.com/search/EOS 第一步:我观察了网页:发现了网页是一个发送ajax请求的网页,发现如下: 然后 我就先爬取 ...