问题 PHP内存限制


在PHP 5.0.4中,如果你  configure -enable-memory-limit,忽略memory_limit指令。 (它在推荐的php.ini文件中设置为8M,但文档说它被忽略了。)那么在这种情况下,是否存在每个脚本的内存限制,还是只受系统的限制?

我问,因为我正在升级到PHP 5.2.8,它  默认允许内存限制。所以现在我实际上必须将值设置为适当的值。推荐的php.ini文件现在设置为128M,但我不知道是不是 更多 要么  比5.0.4默认做的!

我正在升级生产系统,所以我想避免任何重大的行为改变。该 文件 (搜索“memory_limit”)在这一点上非常混乱。它表示“默认”,但我不知道这是否意味着配置文件中设置的默认值,或者禁用内存限制时使用的默认值。


12744
2018-03-06 22:04


起源



答案:


PHP中的内存限制器是可选的;如果你在编译时禁用它,那就完全没有限制了。

在5.0.4中它被禁用,除非你在编译时明确要求它,原因是内存限制器是 没用到5.2 并没有计算它应该做的很多事情,包括mysql函数之类的东西。它转过来了  从5.2.1现在他们学会了数数。

如果有疑问,请将其禁用或确保更新配置文件以使用新的默认值。将它保留在8MB并升级到5.2.8几乎肯定会引起问题。


9
2018-03-07 23:58





128M非常高。你可能需要那个,但我会感到惊讶。

更重要的是,可以在php.ini中将限制设置为全局默认值:

memory_limit = 32M

您也可以在脚本中覆盖它:

<?php
ini_set('memory_limit', '128M');
...

你可能会发现你只有一些需要大量内存的脚本。找到一些舒适的价值(通过测试),然后只需要更多需要更多的价值。


4
2018-03-06 22:08



我的问题是:在5.0.4中,如果你没有设置memory_limit,它还会强制执行吗? - JW.
+1,PHP的垃圾收集器不止一次破坏。由于摆脱超时非常受欢迎,因此了解代码实际情况非常重要 干 到电脑。 - Tim Post♦


答案:


PHP中的内存限制器是可选的;如果你在编译时禁用它,那就完全没有限制了。

在5.0.4中它被禁用,除非你在编译时明确要求它,原因是内存限制器是 没用到5.2 并没有计算它应该做的很多事情,包括mysql函数之类的东西。它转过来了  从5.2.1现在他们学会了数数。

如果有疑问,请将其禁用或确保更新配置文件以使用新的默认值。将它保留在8MB并升级到5.2.8几乎肯定会引起问题。


9
2018-03-07 23:58





128M非常高。你可能需要那个,但我会感到惊讶。

更重要的是,可以在php.ini中将限制设置为全局默认值:

memory_limit = 32M

您也可以在脚本中覆盖它:

<?php
ini_set('memory_limit', '128M');
...

你可能会发现你只有一些需要大量内存的脚本。找到一些舒适的价值(通过测试),然后只需要更多需要更多的价值。


4
2018-03-06 22:08



我的问题是:在5.0.4中,如果你没有设置memory_limit,它还会强制执行吗? - JW.
+1,PHP的垃圾收集器不止一次破坏。由于摆脱超时非常受欢迎,因此了解代码实际情况非常重要 干 到电脑。 - Tim Post♦


在5.2之前的php中的默认内存限制是8MB,在php 5.2.0中它被增加到默认的16MB。目前默认为128MB。

要重现5.2之前版本的行为,请将内存限制明确设置为8MB。

查看php.net网站上的“资源限制”。

http://us.php.net/ini.core

编辑

“在PHP 5.2.1之前,为了使用该指令,必须在编译时通过在配置行中使用-enable-memory-limit来启用它。”

检查旧服务器的编译标志,如果没有启用它,则不会强制执行限制。


3
2018-03-06 22:13



你知道这8MB是否真的被强制执行了吗?这是php.ini中该设置的默认值,但文档说该设置被忽略。 - JW.
我不是故意投票给这个答案,这是一个意外。 - boclodoa