我有使用gmagick渲染图像的代码。它可以在Php5.6 Ubuntu 16.06计算机(Apache2)上运行。
代码回显图像的原始数据,并与png标头一起显示图像。
我已经在新服务器上设置了相同的配置。在新服务器上,相同的代码适用于随机图像,但对于单个特定图像,当回显gmagick生成的图像原始数据时,由于php试图为字符串回显分配大量空间,因此该代码将失败。 (尝试分配1864914417字节)。它需要回显的字符串是250Kb。
对于特定的图像,它似乎错误地将250K字符串弄大了,并试图分配一个巨大的缓冲区。
服务器之间的唯一区别是,旧服务器是php5.6.37,新服务器是php5.6.40。
是什么原因造成的?
在新旧服务器上,BTW输出缓冲均处于打开状态。 两者的phpinfo是相同的。
答案 0 :(得分:1)
这听起来像是您所使用软件的特定版本的错误,并通过单个特定的图像来体现出来。您应该尝试将图像处理软件更新为最新的稳定版本。
这听起来像是内存损坏错误(例如,缓冲区溢出)。如果您在其他系统上以某种方式更改图像,例如将尺寸调整几个px或更改压缩级别,则问题可能会消失。
缓冲区溢出错误可能是安全漏洞,因此请尝试更新。