PHP 使用Spreadsheet写excel缓存导致内存不断增加

embedded/2024/9/21 12:07:50/

这里写自定义目录标题

  • 问题描述
  • 问题解决

问题描述

新增了 Spreadsheet 用于写 excle 文件。
从网上查找一些实例后,封装成 createExcelFormData 函数如下:

php">/*** @brief                   按照指定的键,将 array2(关联数组) 合并到 array1(关联数组)* @param mixed $data       数据数组,其中第一行表示行头* @param mixed $path       输出路径* @param mixed $filename   表格名称* @param mixed $key        0=成功,其他=失败* @return                  array(关联数组)*/
function createExcelFormData($data, $path, $filename)
{if(!mkDirs($path)){return -1;}// Create new Spreadsheet object$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();// Set active sheet$sheet = $spreadsheet->getActiveSheet();// Add data rows$sheet->fromArray($data, null, 'A1');// Save Excel file$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);$writer->save($path . "/" . $filename);
}

自测发现,在每次执行一次导出日志写excel后,内存不断增加如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题解决

经分析和查找一些文档后发现:Spreadsheet写excel表格的是存在缓存机制,缓存在函数执行完成后并不会释放。

对于一些需要清空缓存的场景,需要增加清空缓存语句:PhpOffice\PhpSpreadsheet\Settings::getCache()->clear();

修改后的createExcelFormData函数如下:

php">/*** @brief                   按照指定的键,将 array2(关联数组) 合并到 array1(关联数组)* @param mixed $data       数据数组,其中第一行表示行头* @param mixed $path       输出路径* @param mixed $filename   表格名称* @param mixed $key        0=成功,其他=失败* @return                  array(关联数组)*/
function createExcelFormData($data, $path, $filename)
{if(!mkDirs($path)){return -1;}// Create new Spreadsheet object$spreadsheet = new PhpOffice\PhpSpreadsheet\Spreadsheet();// Set active sheet$sheet = $spreadsheet->getActiveSheet();// Add data rows$sheet->fromArray($data, null, 'A1');// Save Excel file$writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);$writer->save($path . "/" . $filename);// 清空和释放缓存PhpOffice\PhpSpreadsheet\Settings::getCache()->clear(); // 一定要释放cache,否则会导致内存不断增长!!!unset($spreadsheet);unset($writer);
}

http://www.ppmy.cn/embedded/114572.html

相关文章

【Redis入门到精通二】Redis核心数据类型(String,Hash)详解

目录 Redis数据类型 1.String类型 (1)常见命令 (2)内部编码 2.Hash类型 (1)常见命令 (2)内部编码 Redis数据类型 查阅Redis官方文档可知,Redis提供给用户的核心数据…

影刀RPA实战:网页爬虫之携程酒店数据

1.实战目标 大家对于携程并不陌生,我们出行定机票,住酒店,去旅游胜地游玩,都离不开这样一个综合性的网站为我们提供信息,同时,如果你也是做旅游的公司,那携程就是一个业界竞争对手,…

mac电脑打不开rar文件怎么办 rar文件怎么转换成zip并打开

rar文件是一种常见的压缩文件格式,它可以将多个文件或文件夹打包成一个文件,从而节省空间和方便传输。但是,mac系统并没有自带的工具可以直接打开或解压rar文件,那么,mac用户该如何处理rar文件呢? 一、mac电…

【计算机网络 - 基础问题】每日 3 题(十)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

【TypeScript入坑】TypeScript 的复杂类型「Interface 接口、class类、Enum枚举、Generics泛型、类型断言」

TypeScript入坑 Interface 接口简介接口合并TS 强校验Interface 里支持方法的写入class 类应用接口接口之间互相继承接口定义函数interface 与 type 的异同小案例 class 类类的定义与继承类的访问类型构造器 constructor静态属性,Setter 和 Getter做个小案例抽象类 …

OCR两篇革命之作

DocOwl2 参考 阿里8B模型拿下多页文档理解新SOTA,324个视觉token表示一页,缩减80% mPLUG-DocOwl 2聚焦多页文档理解,兼顾效果和效率,在大幅缩减单页视觉token的前提下实现了多页文档理解的SOTA效果。 仅用324个token表示文档图…

智能 Uber 发票 PDF 合并工具

在现代商务出行中,尤其是在跨国出差中,处理和整合大量 Uber 发票已成为一项不小的挑战。手动整理和合并这些发票不仅耗时,还容易出错。作为开发者,为什么不开发一个自动化工具,将这些任务交给代码来完成呢?…

springBoot整合easyexcel实现导入、导出功能

本次使用的框架是springboot&#xff0c;使用mybatisplus操作表&#xff0c;使用easyexcel实现表格的导入与导出。 操作步骤 1、导入依赖&#xff1a;&#xff08;pom.xml&#xff09; <!-- 查看excel的maven仓库 https://mvnrepository.com/artifact/com.alibaba/easyex…