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

时间:2013-11-22 06:37:49

标签: php csv phpexcel

以下代码用于使用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

任何人都可以告诉我为什么这个错误会在哪里出错?

1 个答案:

答案 0 :(得分:0)

嗯,对你的建议很少:

  1. 如果您的xlsx有多个工作表,而您只需要其中一个或几个,那么请尝试仅加载它。
  2. 使用Cell caching
  3. 您还可以使用工作表的toArray()方法消除构建数组的单元格的循环。
  4. 尝试组合或所有上述建议,看看它是否对您有所帮助。另外,请参阅论坛的this讨论。

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

    参考this和以下说明来理解它。