【问题标题】:How to get the real memory limit in a PHP script?如何在 PHP 脚本中获取实际内存限制?
【发布时间】:2013-04-03 14:55:31
【问题描述】:

使用ini_get('memory_limit') 将获得 php.ini 文件中指定的内容(我假设)。但是如果我运行ini_set('memory_limit', 'somethingInsanelyHigh') 然后再次运行ini_get(..),它将返回我之前设置的内容。这让我相信没有真正的方法可以增加内存限制并检测它是否真的增加了,是吗?

ini_set(..) 实际上是做什么的?它只是在某处更新变量还是实际上增加了限制?如果是这样,我怎么知道它是否有效?

【问题讨论】:

    标签: php memory


    【解决方案1】:

    ini_set 成功时返回旧值,失败时返回 FALSE。所以你可能想检查一下:

    if (ini_set('memory_limit', 'somethingInsanelyHigh') === false) {
      // cannot set memory_limit
    }
    

    另外,考虑到这将设置当前 PHP 进程将占用的最大内存量,因此如果您要对该脚本有多个并发请求,您将需要一些合理的东西,以防万一您的脚本真的很吃内存。

    同样将其设置为-1 意味着没有内存限制。

    已编辑:禁用内存限制是将值设置为-1,而不是将其设置为0

    【讨论】:

    • 查看我之前发布的这个例子:pastebin.com/haRC9BZW 所以它确实正确地设置了值。 this will set the maximum amount of memory that the current PHP process will take你怎么知道的?基本上,我只想知道我可以设置的绝对最高值是多少。 ini_get() 没有多大帮助,因为它只会返回我输入的任何内容。
    • 最大值可能是PHP_INT_MAX(只是猜测),但您更有可能在到达之前吃掉内存。 memory_limit 只是限制专用于该脚本的内存量,但不会检查您是否有可用的内存量。
    • 哦,好的,我明白了!我遇到的问题是网站不断产生out of memory 错误。示例:Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 30720 bytes)... 这甚至没有意义,不是吗?还剩很多内存。我错过了什么吗?
    • 67108864 字节为 64M,因此您可能在某处设置了此限制。将其设置为 128M(这是自 PHP 5.3 以来的默认值)或禁用它,将其设置为 -1:ini_set('memory_limit', -1)。见the documentation about memory_limit
    • 是的,但我只尝试分配 30720 字节,这与 64M 相差甚远。我不应该最多分配 64M 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    相关资源
    最近更新 更多