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 相关文章推荐
动态网站web开发 PHP、ASP还是ASP.NET
Oct 09 PHP
php实现mysql数据库备份类
Mar 20 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php一个解析字符串排列数组的方法
May 12 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
详解PHP中curl_multi并发的实现
Jun 08 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 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
php多层数组与对象的转换实例代码
2013/08/05 PHP
php生成rss类用法实例
2015/04/14 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
WAF的正确bypass
2017/01/05 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
自己的js工具_Form 封装
2009/08/21 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
通过设置CSS中的position属性来固定层的位置
2015/12/14 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
python3制作捧腹网段子页爬虫
2017/02/12 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
管理科学大学生求职信
2013/11/13 职场文书
资料员岗位职责
2013/11/17 职场文书
学术会议欢迎词
2014/01/09 职场文书
人事聘任通知
2015/04/21 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL