警告:simplexml_load_string():内存分配失败:缓冲区增长

以下代码用于使用 PHPExcel 将 XLSX 文件转换为 CSV:

  <?php
    require_once 'PHPExcel/PHPExcel/IOFactory.php';
    $excel = PHPExcel_IOFactory::load("test123.xlsx");
    $writer = PHPExcel_IOFactory::createWriter($excel, 'CSV');
    $writer->setDelimiter(";");
    $writer->setEnclosure("");
    $writer->save("test123.csv");
    ?>

我正在尝试将 70MB 的大型 excel 文件转换为 CSV。我收到此错误:

Warning: simplexml_load_string(): Memory allocation failed : growing buffer 

我在 php.ini 中增加了 max_execution_timememory_limit=-1

谁能告诉我为什么这个错误会导致我哪里出错了?

stack overflow Warning: simplexml_load_string(): Memory allocation failed : growing buffer
原文答案

答案:

作者头像

好吧,有几个建议给你:

  1. 如果您的 xlsx 有不止一张,而您只需要一张或几张,那么请尝试仅加载那张。
  2. 使用 Cell caching
  3. 您还可以使用工作表的 toArray() 方法消除循环遍历构建数组的单元格。

尝试组合或所有上述建议,看看它是否可以帮助您。另外,请参阅论坛中的 this 讨论。

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

参考 this 和下面的描述来理解它。