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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
通过对服务器端特性的配置加强php的安全
Oct 09 PHP
在PWS上安装PHP4.0正式版
Oct 09 PHP
第二节--PHP5 的对象模型
Nov 16 PHP
PHP开发过程中常用函数收藏
Dec 14 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
我的论坛源代码(四)
2006/10/09 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php分页代码学习示例分享
2014/02/20 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
简单介绍Python中的floor()方法
2015/05/15 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
计算机求职信
2013/12/01 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
委托证明书
2014/09/17 职场文书
初中生毕业评语
2014/12/29 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技