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

问题描述 投票:0回答:1

以下代码用于使用 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_time
memory_limit=-1

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

php csv phpexcel
1个回答
0
投票

嗯,有一些建议给你:

  1. 如果您的 xlsx 有不止一张纸,而您只需要其中一张或几张,则尝试仅加载该张纸。
  2. 使用单元格缓存
  3. 您还可以使用工作表的
    toArray()
    方法消除构建数组的单元格的循环。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.