我有一堆客户端销售点(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的最大脚本执行时间,但它仍然出错。


当前回答

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

memory_limit = 64M

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

其他回答

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

memory_limit = -1

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

你可以通过修改fastcgi/fpm的memory_limit来解决这个问题:

$vim /etc/php5/fpm/php.ini

更改内存,例如从128更改为512,如下所示

; Maximum amount of memory a script may consume (128 MB)
; http://php.net/memory-limit
memory_limit = 128M

to

; Maximum amount of memory a script may consume (128 MB)
; http://php.net/memory-limit
memory_limit = 512M

增加memory_limit可以解决这个问题。但是,我在查找内存限制时遇到了问题。我直接从实时服务器上处理我的项目,所以如果你也在做同样的事情,在cPanel上,如果你去软件- MultiPHP INI编辑器并选择位置,你可以找到memory_limit。我把我的从256M增加到512M。你也可以在这里找到说明。

在我的情况下,它是一个完整的磁盘和mysql屎在自己。

在释放磁盘空间、修复数据库并重新启动Apache之后,我的站点重新工作了!

一些开车路过的孩子设法淹没了我的日志,填满了我在虚拟机中剩下的大约500个字节。: D

PHP的内存分配可以永久调整,也可以临时调整。

永久

可以通过两种方式永久地更改PHP内存分配。

如果您可以访问php.ini文件,您可以将memory_limit的值编辑为您想要的值。

如果你不能访问你的php.ini文件(你的主机允许),你可以通过你的.htaccess文件覆盖内存分配。添加php_value memory_limit 128M(或您想要的分配值)。

临时

您可以在PHP文件中动态地调整内存分配。你只需有代码ini_set('memory_limit', '128M');(或者你想要的分配)。您可以通过将值设置为“-1”来删除内存限制(尽管机器或实例限制仍然可能应用)。