PHPExcel内存泄漏问题解决方法


Posted in PHP onJanuary 23, 2015

使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的 excel 文档保存来避免内存耗尽。
然而 PHPExcel 存在 circular references 的情况(貌似在最新的 1.6.5 版本中仍然没有去解决这个问题),如果在一次 http 请求过程中反复多次构建 PHPExcel 及 PHPExcel_Writer_Excel5 对象实例来完成多个 excel 文档生成操作的话,所有被构建的对象实例都无法在 http 请求结束之前及时释放,从而造成内存泄漏。
解决办法是在 PHPExcel_Worksheet 类中增加方法:

 public function Destroy() {

     foreach($this->_cellCollection as $index => $dummy) {

         $this->_cellCollection[$index] = null;

     }

 }

并在 PHPExcel 类中增加方法:
 public function Destroy() {

     foreach($this->_workSheetCollection as $index => $dummy) {

         $this->_workSheetCollection[$index]->Destroy();

         $this->_workSheetCollection[$index] = null;

     }

 }

然后在需要资源回收的地方显式的调用 PHPExcel::Destroy() 来处理循环引用的问题。注意 __destruct() 方法是在对象被认为可以被释放的时候才会被调用,所以循环引用的处理不能放到 __destruct() 来进行。
PHP 相关文章推荐
PHP 面向对象 PHP5 中的常量
May 05 PHP
php SQL Injection with MySQL
Feb 27 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
PHP chr()函数讲解
Feb 11 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 PHP
使用PHP生成PDF方法详解
Jan 23 #PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 #PHP
对PHP PDO的一些认识小结
Jan 23 #PHP
smarty模板引擎中自定义函数的方法
Jan 22 #PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 #PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 #PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 #PHP
You might like
Oracle 常见问题解答
2006/10/09 PHP
php smarty的预保留变量总结
2008/12/04 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
utf8的编码算法 转载
2006/12/27 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
遍历js中对象的属性和值的实例
2016/11/21 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
[04:54]DOTA2-DPC中国联赛1月31日Recap集锦
2021/03/11 DOTA
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python实现简单的tcp 文件下载
2020/09/16 Python
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
酒店端午节促销方案
2014/02/18 职场文书
十八届三中全会感言
2014/03/10 职场文书
主持人演讲稿
2014/05/13 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
员工辞职信怎么写
2015/02/27 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
Python中的 No Module named ***问题及解决
2022/07/23 Python