【问题标题】:imagecreatefromstring memory leakimagecreatefromstring 内存泄漏
【发布时间】:2014-07-03 20:43:24
【问题描述】:

您好,我在尝试使用 imagecreatefromstring 时遇到错误 Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 21944 bytes)

        $imageFile = imagecreatefromstring($image);
        if ($imageFile !== false) {
            $width = ImageSX($imageFile);
            $height = ImageSY($imageFile);
        }
        if ($this->isExifInstalled) {
            @$type = exif_imagetype($source);
            $mime = image_type_to_mime_type($type);
        }
        if ($mime === "application/octet-stream") {
            $mime = $this->image_file_type_from_binary($image);
        }
        if ($mime === "application/octet-stream") {
            $mime = $this->getMimeTypeFromUrl($source);
        }
        imagedestroy($imageFile);

【问题讨论】:

  • 尝试增加你的 memory_limit。也许它没有泄漏,确实需要这么多内存。
  • 我认为超过 128MB 内存不是一个好主意。嗯,但那将是我最后的手段。我也尝试了 256MB,但仍然出现错误,但允许的内存大小增加了......
  • 好吧。尝试将其设置一次,例如2G(只是为了测试),当它被超过时,你的应用程序中存在内存泄漏(你将图像存储在 RAM 中的某个地方)或者 PHP ext/gd 中存在错误
  • 好吧,我尝试将内存限制升级到 512MB,它现在可以工作,但这真的有必要吗?或者我可以做些什么来让它在不增加内存的情况下运行?
  • 根据图像的大小,这是必要的。您也不能假设这些函数应该使用尽可能少的内存。

标签: php memory-leaks imagecreatefrompng


【解决方案1】:

将内存限制从可用扩展到双倍完成了这项工作,但问题似乎出在“imagecreatefromstring”方法上,一定存在导致耗尽或错误错误的问题。

可以修改php.ini "memory_limit" 或者使用ini_set("memory_limit","512M");

ini_set 更可取,因为使用它可以识别将来的内存使用情况,更好地探索如何在不超出限制的情况下优化代码的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    • 2013-06-24
    • 2011-03-22
    • 2015-04-20
    相关资源
    最近更新 更多