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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
PHP生成带有雪花背景的验证码
Oct 09 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
sql注入与转义的php函数代码
Jun 17 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
php+ajax实时输入自动搜索匹配的方法
Dec 26 PHP
php+xml实现在线英文词典之添加词条的方法
Jan 23 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
PHP与Web页面的交互示例详解二
Aug 04 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中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
PHP实现搜索相似图片
2015/09/22 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
jQuery中调用WebService方法小结
2011/03/28 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
python中正则表达式的使用详解
2014/10/17 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
python numpy格式化打印的实例
2018/05/14 Python
Python如何访问字符串中的值
2020/02/09 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
C#笔试题集合
2013/06/21 面试题
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
社区学习十八大感想
2014/01/22 职场文书
2014年文学毕业生自我鉴定
2014/04/23 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
敬业奉献模范事迹材料
2014/12/24 职场文书
党员评议自我评价
2015/03/03 职场文书
淮海战役观后感
2015/06/11 职场文书
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫