Thinkphp解决phpExcel导出数据量大导致内存溢出
工作需要导出几万的数据量。操作比较频繁。之前数据在七八千是数据导出很慢。phpExcel是方便但是性能一般。现在改为使用csv导出数据;可以缓解内存压力,一次导出两三万是没问题的。当然服务器内存给力,加上数据库优化相信这个还是比较方便的。
具体方法如下:
在Think文件下新建Csv.class,php
{
//导出csv文件
public function put_csv($list,$title){
$file_name="CSV".date("mdHis",time()).".csv";
header ( 'Content-Type: application/vnd.ms-excel' );
header ( 'Content-Disposition: attachment;filename='.$file_name );
header ( 'Cache-Control: max-age=0' );
$file = fopen('php://output',"a");
$limit=1000;
$calc=0;
foreach ($title as $v){
$tit[]=iconv('UTF-8', 'GB2312//IGNORE',$v);
}
fputcsv($file,$tit);
foreach ($list as $v){
$calc++;
if($limit==$calc){
ob_flush();
flush();
$calc=0;
}
foreach ($v as $t){
$tarr[]=iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);
unset($tarr);
}
unset($list);
fclose($file);
exit();
}
}
?>
然后在控制器引入,使用命名空间即可:
use Think\Csv;
最后是:
数据库查出的字段顺序很重要,字段循序对应excel列的顺序。
$csv = new Csv();
$csv_title = array("字段一","字段二",...);
$csv->put_csv($list,$csv_title);
$list是select处的二维数组。
Thinkphp解决phpExcel导出数据量大导致内存溢出的更多相关文章
- 使用POI导出EXCEL工具类并解决导出数据量大的问题
POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...
- php查询mysql返回大量数据结果集导致内存溢出的解决方法
web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...
- PHPExcel导出数据量过大处理
今天使用PHPExce插件导不出数据,发现是数据量过大的原因,这里只做简单的处理. 1.导出超时处理:在执行页面添加:set_time_limit(0); 2.内存溢出:在执行页面添加:ini_set ...
- phpExcel大数据量情况下内存溢出解决
版本:1.7.6+ 在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过 PHPExcel_Settings::setCacheStorageMethod() 来设置 ...
- phpExcel导入大数据量情况下内存溢出解决方案
PHPExcel版本:1.7.6+ 在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过 PHPExcel_Settings::setCacheStorageMeth ...
- Java线程池队列吃的太饱,撑着了咋整?java 队列过大导致内存溢出
Java的Executors框架提供的定长线程池内部默认使用LinkedBlockingQueue作为任务的容器,这个队列是没有限定大小的,可以无限向里面submit任务. 当线程池处理的太慢的时候, ...
- angular8 打包时 文件过大 导致内存溢出解决方案(记录)
在package.json 中添加 "scripts": { "ng": "ng", "start": "ng ...
- php导出为excel文件避免内存溢出
轻松解决PHPExcel导出10W行超时和内存溢出问题 使用了一个轻量级的PHP的Excel操作库-PHP_XLSXWriter 10w行excel数据导出仅需要5.26秒,再也不用担心excel ...
- POI读写大数据量excel,解决超过几万行而导致内存溢出的问题
1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...
随机推荐
- Flutter安装
下载右边的安装包以获取最新版本 stable 的 Flutter SDK 将压缩包解压,然后把其中的 flutter 目录整个放在你预想的 Flutter SDK 安装目录中(比如 C:\src\fl ...
- MyBatis错误:The server time zone value '?泄???????' is unrecognized or represents more t
原文地址:http://blog.csdn.net/oppo5630/article/details/52162783 解决java.sql.SQLException: The server time ...
- 外部连接mysql docker容器异常
为了方便,使用python测试连接mysql容器 脚本内容非常简单 #!/usr/bin/python3 import pymysql conn=pymysql.connect(host=,passw ...
- 在windows平台下搭建Django项目虚拟环境
参考文档:https://www.cnblogs.com/lovele-/p/8719126.html https://blog.csdn.net/lwcaiCSDN/article/details ...
- MySQL中information_schema数据库是干啥的
大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个 information_schema数据库.information_schema数据库是做什么用的呢,使用WordPress博客 ...
- 数据库与linux中quota的作用
linux命令,quota 命令显示磁盘使用情况和限额.缺省情况下,或者带 -u 标志,只显示用户限额.quota 命令报告 /etc/filesystems 文件中列出的所有文件系统的限额.如果 q ...
- Winform 工程反编译后窗体如何显示
Winform反编译后,如果想要让它象正常的工程一样,可以在窗体编辑器中,编辑,需要做一些工作. 1. 转换.resources 为 .resx 利用resgen工具.这个工具是vs自带的. 在启动 ...
- [Scikit-learn] *2.3 Clustering - DBSCAN: Density-Based Spatial Clustering of Applications with Noise
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html#sklearn.cluster.DBSCAN ...
- kubernetes之StatefulSet部署zk和kafka
前提 至少需要三个node节点,否则修改亲和性配置 如果外部访问,需要自己暴露 需要有个storageClass,这样做的原因是避免手动创建pv了 部署zk和kafka 参考: https://www ...
- Hadoop 部署之 HBase (四)
目录 一.HBase是什么 HBase 和 HDFS HBase的存储机制 二.HBase 集群部署 1.下载安装 2.配置 HBase 环境变量 三.HBase 配置(namenode01) 1.配 ...