【问题标题】:phpexcel Allowed memory size of 134217728 bytes exhausted [duplicate]phpexcel允许的内存大小为134217728字节已用尽[重复]
【发布时间】:2011-07-30 10:11:18
【问题描述】:

我正在使用phpexcel编写一个相当大的excel文件。

我正在从一个看起来像

的数组中写入它
array(
  [0] => stdClass Object
        (
            [sent] => Mar 31st, 2011 02:10PM
            [to_number] => 64211111111
            [additional_txt] => 
            [misc_data] => 
        )
  ...
  [14058] => stdClass Object
        (
            [sent] => Mar 31st, 2011 02:10PM
            [to_number] => 64211111111
            [additional_txt] => 
            [misc_data] => 
        )
)

循环是

$r = 0;
foreach ($replies_obj as $row) {
  $c = 'A';
  foreach ($row as $col)
    $xlsx->getActiveSheet()->setCellValue($c++ . $r, $col);
  $r++;
}

错误是

致命错误:允许的内存大小为 134217728 字节用尽(试图 分配 105 个字节)在 /home/webspace/xxxx/test/htdocs/application/libraries/PHPExcel/Worksheet.php 在第 961 行

这是一个phpexcel问题还是我做错了什么?

我该如何解决这个问题?

【问题讨论】:

  • 是/不是最坏的情况,但出于显而易见的原因,我想避免这种情况......
  • 另外,我不认为你可以将它拆分成块,因为 phpexcel 似乎将工作簿保存在内存中,所以除非它支持“分段”写入,否则它不会工作
  • 为什么要避免呢?如果它有效,并且您有内存,请使用它。我不知道这个类,所以只是猜测你也许可以把它分块。

标签: php arrays memory phpexcel


【解决方案1】:

关于 PHPExcel 和内存使用的文章已经很多了,这里不再赘述。

尝试阅读 PHPExcel 讨论板上讨论该问题的一些主题,例如 this one;或之前在 SO 上的答案,例如 this onethis one

【讨论】:

  • 所有这些链接都是关于阅读的,这是创建并提供给客户下载。我在第 961 行有同样的错误
  • @Grumpy - 无论您是在阅读还是创建工作簿,单元缓存都会减少内存使用量。论坛上的其他主题讨论了使用 fromArray() 在单个调用中设置 seceral 单元格的使用,或者为单元格范围而不是每个单独的单元格设置样式
  • 我遇到了这个问题,不幸的是没有一个建议的解决方案可以帮助我。我最终所做的是将每个工作表写入一个单独的(临时)文件,然后将这些单独的文件与我编写的一些特殊软件结合起来。这将我的内存消耗从 > 512 Mb 减少到远低于 100 Mb。如果您有同样的问题,请参阅github.com/infostreams/excel-merge
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2017-01-05
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多