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输出时间格式
Aug 31 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 PHP
Yii开启片段缓存的方法
Mar 28 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 15 PHP
php封装的mongodb操作类代码
Aug 06 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 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
用ODBC的分页显示
2006/10/09 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现批量下载新浪博客的方法
2015/06/15 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python web框架 django wsgi原理解析
2019/08/20 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
澳大利亚便宜的家庭购物网站:CrazySales
2018/02/06 全球购物
车间副主任岗位职责
2013/12/24 职场文书
在校学生职业规划范文
2014/01/08 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
警察群众路线整改措施
2014/09/26 职场文书
教师辞职信范文
2015/02/28 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android