代码之家  ›  专栏  ›  技术社区  ›  Junior

我的PHP脚本一直在抛出“内存不足”

php
  •  1
  • Junior  · 技术社区  · 6 年前

    我有一个php脚本,它不断地在下面的行中抛出一个错误

    base64_encode(serialize(array($data, $context)))
    

    内存不足(已分配471859200)(尝试分配234607507 字节)

    在调用 base64_encode() 方法

    set_time_limit(0);
    ini_set('memory_limit', '-1');
    

    如您所见,我正在为脚本提供所有可用的物理内存(16GB)

    是什么导致了这个错误?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Álvaro González    6 年前

    PHP生成两条与内存相关的错误消息:

    • memory_limit 超过,例如:

    • 当PHP无法从操作系统获取更多内存时:

      内存不足(已分配%zu)(试图分配%zu字节)

    …根据上下文的不同,有一些细微的措辞变化(参见 Zend\zend_alloc.c 有关详细信息)。

    用一个比喻,你可以用尽你的磁盘配额或磁盘可以填补。

    第二种情况基本上是崩溃,如果在32位PHP进程中运行内存密集型任务,则相对容易找到。没有固定的规则,但当你的需求接近1GB时,坏事就会发生。如果你 determine 你运行的是32位PHP(操作系统架构无关紧要),即使你不运行,你也可以考虑重写。

    我不知道你的用例,所以这些只是模糊的提示:

    • 我想你 base64_encode() 你的数据要提交到别处。也许您不需要将整个数据保存在内存中,您可以 decode it in chunks 你去的时候就把它寄出去或者存到一个文件里。

    • 你可以替换 serialize() 另一种实现可以分块操作或切换到另一种格式。

    推荐文章