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代码的53条建议
Mar 27 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
php之curl设置超时实例
Nov 03 PHP
php使用curl出现Expect:100-continue解决方法
Mar 03 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 PHP
PHP程序守护进程化实现方法详解
Jul 16 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使用curl存储cookie的示例
2014/03/31 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
php生成短域名函数
2015/03/23 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
精解window.setTimeout()&amp;window.setInterval()使用方式与参数传递问题!
2007/11/23 Javascript
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
jQuery select控制插件
2009/08/17 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
正则中的回溯定义与用法分析【JS与java实现】
2016/12/27 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
Python实现字符串格式化输出的方法详解
2017/09/20 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python实现猜拳游戏
2020/03/04 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
pymysql模块使用简介与示例
2020/11/17 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
创意活动策划书
2014/01/15 职场文书
小学教师师德感言
2014/02/10 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
团组织推优材料
2014/12/29 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
python自动计算图像数据集的RGB均值
2021/06/18 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python