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 相关文章推荐
用PHP制作静态网站的模板框架(四)
Oct 09 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
php class类的用法详细总结
Oct 17 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
PHP中的traits简单使用实例
May 13 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
php的命名空间与自动加载实现方法
Aug 25 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
PHP 函数语法介绍一
2009/06/14 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
python实现划词翻译
2020/04/23 Python
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python中DJANGO简单测试实例
2015/05/11 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
基于Python正确读取资源文件
2020/09/14 Python
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
《童年的发现》教学反思
2014/02/14 职场文书
生产操作工岗位职责
2014/09/16 职场文书
乡镇党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
电力安全学习心得体会
2016/01/18 职场文书
python opencv通过按键采集图片源码
2021/05/20 Python
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP