PHP内存限制

时间:2009-03-06 22:04:43

标签: php

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

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

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

3 个答案:

答案 0 :(得分:9)

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

在5.0.4中它被禁用,除非你在编译时明确要求它,原因是内存限制器是useless until 5.2并且没有计算它应该做的很多事情,包括像mysql函数。现在,他们从5.2.1开始 on ,他们学会了数数。

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

答案 1 :(得分:4)

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

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

memory_limit = 32M

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

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

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

答案 2 :(得分:3)

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来启用它。”

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