警告:simplexml_load_string():内存分配失败

时间:2019-11-26 14:06:27

标签: php codeigniter-3 phpexcel

在Excel工作表和CSV阅读器中遇到一个问题,在Codeignitor中有大量记录。

A PHP Error was encountered
Severity: Warning
Message: simplexml_load_string(): Memory allocation failed : growing buffer
Filename: Reader/Excel2007.php
Line Number: 645
Backtrace:
File: \application\third_party\PHPExcel\Reader\Excel2007.php
Line: 645
Function: simplexml_load_string
File: \application\controllers\admin\Csv.php
Line: 56
Function: load
File: \index.php
Line: 322
Function: require_once

2 个答案:

答案 0 :(得分:2)

要增加PHP内存限制设置,请编辑PHP.ini文件。只需增加php.ini中PHP内存限制行的默认值(例如:脚本可能消耗的最大内存量= 128MB)。

memory_limit = 256M

或者,您可以编辑.htaccess文件。

php_value memory_limit 256M

注意:如果您无权访问这些文件或缺乏进行此更改的经验,则可以联系您的虚拟主机,并要求他们增加您的PHP内存限制。

答案 1 :(得分:0)

第一种选择是使用文件php.ini中的设置增加php的内存。

memory_limit = 256M

这个数字可以更低也可以不同,但​​是至少应该比现在更高,但是可以肯定的是它也可以高于256M。 更改之后,也许必须重新启动服务器(取决于某些事情)。

如果这没有帮助,那么值得看一下应用程序甚至CSV文件。
有关大多数框架的基本问题是,如果应用了数据,则将其收集,保存在内存中,进行解析,然后将结果显示或写入数据库中。
大数据程序可以以某种方式对数据进行分块,这也意味着仅可以逐步简化和处理(例如视频或声音文件)。 由于XML不是流格式,但是在处理之前通常需要完全解析的结构,提示可能看起来有点没用。但是也许您可以采取一些措施来减少要立即处理的数据量:

  • 如果使用simplexml一次处理多个文件,那么减少文件量就很容易了。
  • 如果XML文件太大,则必须生成较小的文件。也可以拆分文件,但需要了解XML的一些知识。

通常,对CodeIgniter中的实现进行细微调整可能已经解决了问题,但是由于此处未知,我们只能对此进行猜测。