【问题标题】:How to change the allowed amout of allocated memory?如何更改允许的分配内存量?
【发布时间】:2011-01-01 07:19:47
【问题描述】:

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

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

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


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

【问题讨论】:

  • 我想知道错误消息,因为它说试图分配 40000 字节,这小于允许的内存大小 33554432 字节。如何通过提高内存限制来解决这个问题。我降落在这里,因为我遇到了类似的问题,并认为这不是解决这个问题的方法。如果我说话像菜鸟,请有人教育我。

标签: php image memory size byte


【解决方案1】:

要更改 memory_limit,您必须在 php.ini 文件中编辑 memory_limit 指令——如果您不希望修改对您的整个服务器,但仅限于一个网站。

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

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


另一种可能性可能是使用 imagemagick 及其convert 可执行文件,使用Program execution Functions 之一。这样,PHP 就不会调整图像的大小。

但是,在这里,这意味着您依赖于外部程序...

【讨论】:

  • memory_limitPHP_INI_ALL 可变的。
  • 我无权访问 php.ini 文件。
【解决方案2】:

您需要在php.ini 配置文件中执行此操作:memory_limit

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      php_value memory_limit 32M
      

      如果您无法访问您的 php.ini 或者您想在站点的特定区域更改此​​设置,.htaccess 解决方案可以帮助您。在我的示例中,限制提高到 32MB。请注意,某些主机不支持此设置或不支持超大值(尤其是在共享主机环境中)。

      【讨论】:

        【解决方案5】:

        试试

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

        也许你的$bignumber 没有以兆字节为单位(因此是 M)。

        【讨论】:

          【解决方案6】:

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

          "我想我解决了我自己的问题,我可以检查图像的 $width 和 $height,"

          gd getimagesize 将返回值,这些值将映射到 GD 中位图的内存使用情况,但是您也许应该考虑在文件到达 PHP 之前限制上传大小和最大帖子大小

          C.

          【讨论】:

          • 当我无法访问 php.ini.file 时如何更改内存限制?
          • 根据其他帖子,可以更改 .htaccess usnig php_value 中的一些设置 - 但通常您只能更改 PHP 启动后可以修改的值。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-26
          • 1970-01-01
          • 2012-01-21
          • 1970-01-01
          • 2018-08-09
          • 1970-01-01
          相关资源
          最近更新 更多