致命错误:允许的134217728字节的内存大小已用尽(CodeIgniter + XML-RPC)

霸气de小男生 提交于 2020-01-06 23:20:20

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

我有一堆客户端销售点(POS)系统,这些系统定期将新的销售数据发送到一个集中式数据库,该数据库将数据存储到一个大型数据库中以生成报告。

客户端POS基于PHPPOS,我已经实现了一个模块,该模块使用标准XML-RPC库将销售数据发送到服务。 该服务器系统基于CodeIgniter构建,并为Web服务组件使用XML-RPC和XML-RPCS库。 每当我发送大量销售数据时(从sales表中少到50行,而来自sales_items中与销售中每个项目有关的单独行)都会出现以下错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)

php.ini的默认值为128M,但是我认为这是一个很大的数字。 实际上,我什至尝试将此值设置为1024M,而这样做所花费的时间更长。

至于我采取的步骤,我尝试禁用服务器端的所有处理,并操纵它以返回固定响应,而不管输入如何。 但是,我认为问题出在实际发送数据上。 我什至尝试禁用PHP的最大脚本执行时间,但仍然出错。


#1楼

对于Drupal用户,此Chris Lane的回答是:

ini_set('memory_limit', '-1');

可以,但是我们需要在开幕之后放

<?php

网站根目录中index.php文件中的标记。


#2楼

在Drupal 7中,您可以在站点/默认文件夹中的settings.php文件中修改内存限制。 在260行附近,您会看到:

ini_set('memory_limit', '128M');

即使您的php.ini设置足够高,但如果您的Drupal settings.php文件中未设置该值,您将也不会消耗超过128 MB的内存。


#3楼

正确的方法是编辑php.ini文件。 将memory_limit编辑为所需的值。

根据您的问题,已经超过了128M (这是默认限制),因此您的代码存在严重问题,因为它占用的时间不多。

如果您知道为什么要花那么多钱并且想要允许它设置memory_limit = 512M或更高,那么您应该很好。


#4楼

通过ini_set('memory_limit', '-1');更改memory_limit ini_set('memory_limit', '-1'); 不是正确的解决方案。 请不要那样做。

您的PHP代码可能在某处存在内存泄漏,并且您告诉服务器只使用它想要的所有内存。 您根本不会解决问题。 如果监视服务器,您会发现它现在可能已用完大部分RAM,甚至交换到磁盘。

您可能应该尝试在代码中查找有问题的代码并进行修复。


#5楼

PHP 5.3+允许您通过将.user.ini文件放置在public_html文件夹中来更改内存限制。 只需创建上面的文件并在其中输入以下行:

memory_limit = 64M

某些cPanel主机仅接受此方法。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!