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判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
Apr 25 PHP
解析isset与is_null的区别
Aug 09 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
深入剖析PHP中printf()函数格式化使用
May 23 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
Feb 04 PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
PHP执行系统命令函数实例讲解
Mar 03 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
搜索引擎技术核心揭密
2006/10/09 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
JS实现self的resend
2010/07/22 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
详解python进行mp3格式判断
2016/12/23 Python
python实现决策树
2017/12/21 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
Python调用JavaScript代码的方法
2020/10/27 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
应届大学生求职的自我评价
2013/11/17 职场文书
销售助理岗位职责
2014/02/21 职场文书
动员大会主持词
2014/03/20 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
黑白记忆观后感
2015/06/18 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
2016高校自主招生自荐信范文
2016/01/28 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers