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 相关文章推荐
SSI指令
Nov 25 PHP
使用PHP数组实现无限分类,不使用数据库,不使用递归.
Dec 09 PHP
PHP函数utf8转gb2312编码
Dec 21 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
laravel 获取当前url的别名方法
Oct 11 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
关于环保的活动方案
2014/08/25 职场文书
工作保证书怎么写
2015/02/28 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
交通安全教育心得体会
2016/01/15 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python