加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHPExcel内存泄漏问题解决方法

发布时间:2020-12-13 02:21:50 所属栏目:PHP教程 来源:网络整理
导读:《:PHPExcel内存泄漏问题解决方法》要点: 本文介绍了:PHPExcel内存泄漏问题解决方法,希望对您有用。如果有疑问,可以联系我们。 使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的 excel 文档保

《:PHPExcel内存泄漏问题解决方法》要点:
本文介绍了:PHPExcel内存泄漏问题解决方法,希望对您有用。如果有疑问,可以联系我们。

使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的 excel 文档保存来避免内存耗尽.
然而 PHPExcel 存在 circular references 的情况(貌似在最新的 1.6.5 版本中仍然没有去解决这个问题),如果在一次 http 哀求过程中反复多次构建 PHPExcel 及 PHPExcel_Writer_Excel5 对象实例来完成多个 excel 文档生成操作的话,所有被构建的对象实例都无法在 http 哀求结束之前及时释放,从而造成内存泄漏.
解决办法是在 PHPExcel_Worksheet 类中增加方法:
PHP编程

代码如下:

?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() 来进行.

欢迎参与《:PHPExcel内存泄漏问题解决方法》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读