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

问题描述 投票:-1回答:2

在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
php codeigniter-3 phpexcel
2个回答
0
投票

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

memory_limit = 256M

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

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

  • 如果使用simplexml一次处理多个文件,仅减少文件量就应该很容易。
  • 如果XML文件太大,则必须生成较小的文件。也可以分割文件,但需要一点有关XML的知识。

[一般来说,对CodeIgniter中的实现进行细微调整可能已经解决了问题,但由于这里未知,我们只能猜测一下。


0
投票

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

memory_limit = 256M

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

php_value memory_limit 256M

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

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