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 session有效期session.gc_maxlifetime
Apr 20 PHP
php设计模式 State (状态模式)
Jun 26 PHP
php ctype函数中文翻译和示例
Mar 21 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
php使用CURL伪造IP和来源实例详解
Jan 15 PHP
PHP生成压缩文件实例
Feb 07 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
2019/04/02 PHP
判定是否原生方法的JS代码
2013/11/12 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python中optparse模块使用浅析
2015/01/01 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
python3.6的venv模块使用详解
2018/08/01 Python
Django 视图层(view)的使用
2018/11/09 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
Python input函数使用实例解析
2019/11/22 Python
PyTorch中permute的用法详解
2019/12/30 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
世界上最大的二手相机店:KEN
2017/05/17 全球购物
世界上最值得信赖的多日游在线市场:TourRadar
2018/07/20 全球购物
毕业生动漫设计求职信
2013/10/11 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
团队激励口号
2014/06/06 职场文书
装配出错检讨书
2014/09/23 职场文书
房屋授权委托书范本
2014/10/07 职场文书
单位提档介绍信
2015/10/22 职场文书
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS
利用js实现简单开关灯代码
2021/11/23 Javascript