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实现小型站点广告管理
Oct 09 PHP
PHP 手机归属地查询 api
Feb 08 PHP
9个PHP开发常用功能函数小结
Jul 15 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
php中如何执行linux命令详解
Nov 06 PHP
PHP strripos函数用法总结
Feb 11 PHP
PHP数组对象与Json转换操作实例分析
Oct 22 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
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
php 带逗号千位符数字的处理方法
2012/01/10 PHP
php-redis中的sort排序函数总结
2015/07/08 PHP
详解js异步文件加载器
2016/01/24 PHP
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
2015/06/08 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
国贸专业个人求职信范文
2014/01/08 职场文书
2014教师研修学习体会
2014/07/08 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
财务务虚会发言材料
2014/10/20 职场文书
世界遗产的导游词
2015/02/13 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
Nginx配置https的实现
2021/11/27 Servers
python_tkinter事件类型详情
2022/03/20 Python