`

PHPExcel内存泄漏问题

    博客分类:
  • PHP
 
阅读更多

使用 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() 来进行。

From:http://www.zeali.net/entry/605

分享到:
评论

相关推荐

    PHPExcel内存泄漏问题解决方法

    解决PHPExcel内存泄漏的问题,首先需要了解造成内存泄漏的原因。在PHPExcel中,一个常见的原因是对象之间的循环引用。循环引用是指两个或多个对象相互引用,形成了一个闭环,导致这些对象无法被垃圾回收器回收。例如...

    phpExcel类扩展1.8

    - 资源管理:由于处理Excel文件可能消耗大量内存,建议在操作完成后及时释放相关资源,避免内存泄漏。 总的来说,phpExcel 1.8是一个实用且功能丰富的PHP类库,适用于处理和交换Excel数据。开发者可以通过灵活运用...

    phpexcel实例

    - 使用完毕后记得释放对象,避免内存泄漏。 - 文件大小和复杂度会影响处理速度,对于非常大的文件,可能需要寻找其他解决方案,如`Spout`库。 - `PHPExcel`库已不再维护,推荐使用其替代品`PhpSpreadsheet`。 总结...

    PHPexcel文件

    - **资源释放**:在完成操作后,记得释放PHPExcel对象,避免内存泄漏。 - **版本兼容性**:随着PHPExcel的更新,注意检查代码与新版本的兼容性。 总的来说,PHPExcel是一个强大的工具,能够帮助开发者高效地处理...

    phpexcel操作

    - 避免直接在Web可访问的目录存储用户上传的文件,以防文件泄露或被篡改。 - 使用适当的缓存策略,减少不必要的读写操作,提高性能。 - 对于大型Excel文件,考虑分块处理以防止内存溢出。 掌握这些知识点后,你...

    PHPExcel.zip

    `防止内存泄漏。 通过学习和实践PHPExcel,你可以轻松地在PHP应用程序中处理Excel数据,无论是从用户上传的文件中提取数据,还是生成报告供用户下载。它是一个强大且灵活的工具,能够满足各种Excel操作需求。

    PHP实例开发源码—PHPExcel 读写 Excel 2007 (OpenXML) 文件的 库.zip

    1. **资源管理**:由于PHPExcel可能消耗大量内存,应确保在操作完成后及时释放相关资源,避免内存泄漏。 2. **分块读写**:处理大数据时,使用`PHPExcel_WorksheetIterator`或自定义迭代器分块读取和写入数据。 3. *...

    PHP大批量数据操作时临时调整内存与执行时间的方法

    您可能感兴趣的文章:深入解析PHP垃圾回收机制对内存泄露的处理深入PHP内存相关的功能特性详解php页面消耗内存过大的处理办法phpExcel导出大量数据出现内存溢出错误的解决方法如何获知PHP程序占用多少内存(memory_...

    php下载excel表

    当处理大量数据时,注意控制内存使用,可以分批写入数据,或者利用PHPExcel的内存优化模式。另外,完成后记得释放PHPExcel对象以释放内存。 7. **安全考虑**: 在生成下载链接时,确保只有授权的用户可以访问,...

    一个简易的PHP 大数据量导出导入类

    10. **安全性考虑**:在导出数据时,需要确保不泄露敏感信息,可以对数据进行脱敏处理。导入时,要防止SQL注入和其他安全风险。 综上所述,PHP在处理大数据量导出导入时,需结合分块处理、流式处理、内存优化、文件...

    基于PHP的-excel 用于生成excel文档的函数库.zip

    - 在生产环境中,确保处理文件的安全性,避免潜在的XSS攻击或数据泄露。 综上所述,“基于PHP的-excel”函数库为开发者提供了强大且灵活的工具,以处理与Excel相关的任务。通过熟练掌握这些库,可以显著提高工作...

    Web Excel導出功能實現

    - 避免敏感数据泄露,对导出的数据进行权限控制和过滤,只允许用户导出他们有权访问的数据。 7. **用户体验**: - 提供进度反馈,比如显示加载动画或百分比完成状态。 - 错误处理,当导出失败时,向用户提供清晰...

    《细说PHP》光盘源码

    13. PHP性能优化:提供代码优化技巧,如减少数据库查询次数,合理使用缓存,避免内存泄漏等。 14. PHP单元测试:使用PHPUnit等工具编写和执行单元测试,确保代码质量。 这些知识点覆盖了从PHP初学者到进阶开发者所...

    PHP 5.3.10 for Linux.zip

    这些修复可能包括对内存泄漏、安全漏洞的解决,以及对特定函数和扩展的性能提升。 ### 3. 在Linux环境中的安装与配置 在Linux系统上安装PHP 5.3.10,通常涉及以下步骤: - 下载:从官方或者第三方镜像站点下载...

    excl读写excl读写

    - 读写大文件时,需注意内存管理,避免一次性加载整个文件。 - 在处理Excel文件时,要注意数据类型转换和格式化问题。 - 文件权限和路径正确性是保证读写操作成功的关键。 - 保持良好的编程习惯,及时关闭文件流,...

Global site tag (gtag.js) - Google Analytics