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 静态变量的初始化
Nov 15 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
Jun 14 PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
PHP中set error handler函数用法小结
Nov 11 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
php的常量和变量实例详解
Jun 27 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 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调用mysql存储过程
2007/02/14 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
php加密解密字符串示例
2016/10/13 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
初步解析Python下的多进程编程
2015/04/28 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Python OpenCV获取视频的方法
2018/02/28 Python
python爬取网易云音乐评论
2018/11/16 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
高中毕业生自我鉴定范文
2013/09/26 职场文书
生物技术毕业生自荐信
2013/10/23 职场文书
宿舍违规检讨书
2014/01/12 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
违反单位工作制度检讨书
2014/10/25 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书