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 相关文章推荐
如何开发一个虚拟域名系统
Oct 09 PHP
php的正则处理函数总结分析
Jun 20 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
php实现的SESSION类
Dec 02 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
php ajax异步读取rss文档数据
Mar 29 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
Apr 15 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
php抽象类和接口知识点整理总结
Aug 02 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
使用网络地址转换实现多服务器负载均衡
2006/10/09 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
javascript history对象详解
2017/02/09 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
python fabric使用笔记
2015/05/09 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
广告学专业应届生求职信
2013/10/01 职场文书
工作收入住址证明
2014/10/28 职场文书
中学推普周活动总结
2015/05/07 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL