问题描述
新增了 Spreadsheet 用于写 excle 文件。
从网上查找一些实例后,封装成 createExcelFormData 函数如下:
- /**
- * @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函数如下:
- /**
- * @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);
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |