无法使用ini_set()增加memory_limit

8

我刚刚注意到,使用ini_set()无法将内存限制增加到超过php.ini中配置的值。但是,我可以将其设置为低于该值的任何值,并将其增加到ini文件中定义的其他任何低于该值的值。

有人知道为什么会发生这种情况或者如何解决吗?


你运行自己的服务器吗?还是你有托管账户? - Niels Bom
4
我认为memory_limit是一个受保护的设置。在共享服务器上允许脚本使用所有可用内存是没有意义的。因此,如果您使用的是共享服务器,则解决方法是询问您的托管公司;如果您使用的是专用服务器,则可以在php.ini文件中更改该设置。 - zneak
Zneak是正确的。你可以向你的ISP请求增加限制。 - Ben Fransen
我知道我可以在php.ini中更改它(这是我的开发机器),但文档记录的行为是它可以在运行时更改,我想要一个或两个文件的更高限制,而不是整个项目。 ini指令的文档:http://de.php.net/manual/en/ini.core.php#ini.sect.resource-limits - soulmerge
不要问你的ISP,而是问你的托管公司! - wlf
4个回答

12

根据手册来看,设置内存限制可以在任何地方进行,这很奇怪。

  • 您是否安装了Suhosin?使用Suhosin,可以强制实施全局内存限制。

  • 您是否有一个.htaccess文件,其中包含php_value memory_limit xyz的设置?

  • 您是否激活了Shell Fork Bomb保护?它可以强制进行全局内存限制。请参见此处的SO问题(我想这可能是Suhosin的一部分)。

  • 您的phpinfo()关于“本地”和“全局”memory_limit值有什么说法?

  • 您如何指定内存限制?能否发布代码片段?


3
非常感谢,原来是suhosin补丁的问题。suhosin.memory_limit默认值导致了这种行为:http://www.hardened-php.net/suhosin/configuration.html#suhosin.memory_limit - soulmerge

1

在共享主机账户上,您无法覆盖内存限制。这很简单。获取私人(专用)托管,并要求您的提供商将其全部设置(虽然不建议这样做)。


无法在共享托管帐户上执行此操作的原因是它们通常启用了“safe_mode”,而这在我的本地机器上并非如此。 - soulmerge

1

检查您的“safe_mode”设置 - 如果启用,可能会阻止您提高memory_limit(尽管没有记录)。


0

PHP-FPM

在池配置文件中有一个额外的memory_limit(即每个池都可以配置一个硬内存限制),例如:

php_admin_value[memory_limit] = 256M

在这种情况下,对于所有大于限制的值,ini_set('memory_limit', $value)将返回false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接