phpExcel导出大量数据出现内存溢出错误的解决方法


Posted in PHP onFebruary 28, 2013

phpExcel将读取的单元格信息保存在内存中,我们可以通过

PHPExcel_Settings::setCacheStorageMethod()

来设置不同的缓存方式,已达到降低内存消耗的目的!

1、将单元格数据序列化后保存在内存中

PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;

2、将单元格序列化后再进行Gzip压缩,然后保存在内存中

PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;

3、缓存在临时的磁盘文件中,速度可能会慢一些

PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;

4、保存在php://temp

PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;

5、保存在memcache中

PHPExcel_CachedObjectStorageFactory::cache_to_memcache

举例:

第4中方式:

 

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;  
$cacheSettings = array( ' memoryCacheSize '  => '8MB'  
                );  
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

第5种:

 

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;  
$cacheSettings = array( 'memcacheServer'  => 'localhost',  
                        'memcachePort'    => 11211,  
                        'cacheTime'       => 600  
                      );  
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

其它的方法

第一个方法,你可以考虑生成多个sheet的方式,不需要生成多个excel文件,根据你数据总量计算每个sheet导出多少行, 下面是PHPExcel生成多个sheet方法:

面是PHPExcel生成多个sheet方法:

$sheet = $objPHPExcel->getActiveSheet(); 
$sheet->setCellValue('A1',$x);  
$sheet->setCellValue('B1',$y);

第二个方法,你可以考虑ajax来分批导出,不用每次刷新页面。

 

<a href="#" id="export">export to Excel</a> 
$('#export').click(function() {  
    $.ajax({  
        url: "export.php",   
        data: getData(),  //这个地方你也可以在php里获取,一般读数据库  
        success: function(response){  
            window.location.href = response.url;  
        }  
    })  
});
<?php 
//export.php 
$data = $_POST['data'];
$xls = new PHPExcel(); 
$xls->loadData($formattedData);
$xls->exportToFile('excel.xls');
$response = array( 
'success' => true, 
'url' => $url 
); 
header('Content-type: application/json'); 
echo json_encode($response); 
?>

数据量很大的话,建议采用第二种方法,ajax来导出数据,上面方法简单给了个流程,具体你自己补充!

PHP 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
一篇有意思的技术文章php介绍篇
Oct 26 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
PHP中使用smarty生成静态文件的例子
Apr 24 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
May 12 PHP
PHP读取文件或采集时解决中文乱码
Mar 09 PHP
Apache中php.ini的设置方法
Feb 28 #PHP
PHP中如何定义和使用常量
Feb 28 #PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 #PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 #PHP
PHP删除非空目录的函数代码小结
Feb 28 #PHP
PHP生成随机用户名和密码的实现代码
Feb 27 #PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 #PHP
You might like
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
SESSION存放在数据库用法实例
2015/08/08 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
借助node实战JSONP跨域实例
2017/03/30 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
python3 实现口罩抽签的功能
2020/03/11 Python
ET Mall东森购物网:东森严选
2017/03/06 全球购物
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
外语系毕业生求职自荐信
2014/04/12 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers