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
main.php
Dec 09 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
php 显示指定路径下的图片
Oct 29 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
django中的ajax组件教程详解
Oct 18 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
E路文章系统PHP
2006/12/11 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
return false;和e.preventDefault();的区别
2010/07/11 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
python判断变量是否为列表的方法
2020/09/17 Python
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
港湾网络笔试题
2014/04/19 面试题
几道Java和数据库的面试题
2013/05/30 面试题
小学语文教学反思
2014/02/10 职场文书
学习雷锋活动总结
2014/04/29 职场文书
公司承诺书格式
2014/05/21 职场文书
团日活动总结模板
2014/06/25 职场文书
工作目标责任书
2014/07/23 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
2015年司法局工作总结
2015/05/22 职场文书
创业计划书之少年玩具店
2019/09/05 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
python 如何做一个识别率百分百的OCR
2021/05/29 Python
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python