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

如何更改已分配内存的允许数量?

  •  0
  • Phoexo  · 技术社区  · 15 年前

    致命错误:第62行/mounted storage/home20a/sub001/sc20063 gjyd/[…]中允许的内存大小33554432字节已用完(尝试分配40000字节)

    看起来PHP脚本只允许我为内存分配32MB?这是一个 example image 测试如果用户试图上传一张巨幅图片会发生什么。

    我的问题是:如何预测会发生这种情况,然后提醒用户图像太大而不是返回此错误?我测试它已经有一段时间了,但是我想我尝试了try catch和@,但是它们都失败了,因为这是一个致命的错误。示例图像的大小只有1KB,因此无法检查该值。


    我想我已经解决了我自己的问题,我可以检查图像的$width和$height,然后通知用户如果图像太大,但我还有一个问题:如何更改分配内存的允许数量?我假设我的用户会尝试发布许多高分辨率的图像。我试过了 ini_set("memory_limit", $bignumber) 但它不起作用。

    6 回复  |  直到 15 年前
        1
  •  1
  •   Pascal MARTIN    15 年前

    改变 memory_limit ,您必须编辑 memory_limit php.ini文件中的指令——如果您不希望修改对整个服务器有效,而只对一个网站有效,也可以在Apache的虚拟主机中完成。

    但您可能并不总是这样做——您需要成为服务器的管理员…

    顺便说一句,你可以看看 How to change configuration settings .


    另一种可能是使用ImageMagick,它的 convert 可执行文件,使用 Program execution Functions . 这样,PHP就不会调整图像的大小。

    但是,在这里,它意味着你依赖于一个外部程序…

        2
  •  1
  •   erenon    15 年前

    您也可以通过ini-set编辑允许的内存大小,但是安全模式或suhoshin补丁可能 block it . 在php.ini中的memory_limit指令处设置所需的内存大小。

        3
  •  1
  •   symcbean    15 年前

    如果您想增加内存限制,这需要在启动解释器之前完成(即,您需要在php.in i文件中更改它,而不是使用in i-set)。

    “我想我解决了我自己的问题,我可以检查图像的宽度和高度。”

    gd getImageSize将返回一些值,这些值将映射到gd中位图的内存使用情况,但是您可能应该考虑在文件到达php之前限制上载大小和最大post大小。

    C.

        4
  •  0
  •   Gregory Pakosz    15 年前

    你需要在 php.ini 配置文件: memory_limit .

        5
  •  0
  •   metrobalderas    15 年前

    尝试用

    ini_set("memory_limit","50M");
    

    也许你的 $bignumber 不是以兆字节为单位指定的(因此是m)。

        6
  •  0
  •   AlexV    15 年前

    在php.ini中编辑设置,或者也可以使用.htaccess(如果不在Windows主机上),其中包含以下行:

    php_value memory_limit 32M
    

    如果您没有访问php.ini的权限,或者希望在站点的特定区域更改此设置,.htaccess解决方案可以帮助您。在我的示例中,限制被提升到32MB。请注意,某些主机将不支持此功能,或者不支持超大值(特别是在共享主机环境中)。