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

客户机POS基于PHPPOS,我实现了一个模块,该模块使用标准XML-RPC库将销售数据发送到服务。服务器系统构建在CodeIgniter上,并为webservice组件使用XML-RPC和XML-RPC库。每当我发送大量的销售数据(从销售表中只有50行,从sales_items中单独的行用于销售中的每个项目),我得到以下错误:

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

128M是php.ini中的默认值,但我认为这是一个巨大的数字。事实上,我甚至尝试过将这个值设置为1024M,它所做的只是花费更长的时间来出错。

至于我所采取的步骤,我已经尝试在服务器端禁用所有处理,并对其进行了修改,使其返回一个罐装响应,而不管输入是什么。但是,我认为问题出在数据的实际发送上。我甚至尝试过禁用PHP的最大脚本执行时间,但它仍然出错。


当前回答

报错(' memory_limit ', ' 1 ');覆盖默认的PHP内存限制。

其他回答

修改php.ini文件中的内存限制并重新启动Apache。重启后,运行phpinfo();函数从任何PHP文件中获取memory_limit更改确认。

memory_limit = -1

内存限制-1表示没有设置内存限制。现在是最大值。

在我的情况下,mac (Catalina - Xampp)没有加载文件,所以我必须先这样做。

sudo cp /etc/php.ini.default /etc/php.ini
sudo nano /etc/php.ini

然后修改memory_limit = 512M

然后重新启动Apache,检查文件是否加载

php -i | grep php.ini

结果是

Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

最后检查

php -r "echo ini_get('memory_limit').PHP_EOL;"

对于那些正在挠头寻找为什么这个小函数会导致内存泄漏的人来说,有时由于一个小错误,一个函数开始递归地永远调用自己。

例如,代理类与将要代理它的对象的函数具有相同的名称。

class Proxy {

    private $actualObject;

    public function doSomething() {

        return $this->actualObjec->doSomething();
    }
}

有时你可能会忘记带那个小的actualobjecc成员,因为代理实际上有那个doSomething方法,PHP不会给你任何错误,对于一个大的类,它可能会被隐藏几分钟,以找出它泄漏内存的原因。

PHP 5.3+允许您通过在public_html文件夹中放置.user.ini文件来更改内存限制。 简单地创建上面的文件,并在其中键入以下一行:

memory_limit = 64M

一些cPanel主机只接受这个方法。

出现此错误的原因是您的服务器配置的内存限制非常低。尝试将此添加到wp-config.php(将其放在<?PHP在这个文件中):

define('WP_MEMORY_LIMIT', '96M');

请注意,这个限制对于主题和随主题而来的插件是OK的。如果你想启用其他插件,你可能需要进一步增加限制。

define('WP_MEMORY_LIMIT', '256M');