PHP处理图片导致内存溢出

我的个人博客:逐步前行STEP

今天上传一些图片到我们的网站上,发现有些图片上传后没有任何提示就报错500,调试一下发现是在做图片处理的时候报错的,查日志后发现如下提示:

FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8192 bytes)

原来是内存溢出了,可是上传的图片都不大,因为网站限制上传文件不能超过10M,而ini配置文件中的上传限制和NGINX服务器的配置文件的上传限制都远大于10M,怎么还会内存溢出???

然后一番检索发现有位仁兄提出一个图片占用内存的公式:

(图片对象的width和height )X(图片的通道数,一般是3)X 1.7

按这个计算,我上传的4.2M的图片(6577 × 4385)占了140M,而默认的内存限制是128M,妥妥的超过了,不过这个公式应该是估算,实际报错提示占用了128.0078125M,也就刚好超过128M,离140M差得有点多,不过多次测试结果表明只要按这个公式计算结果小于134217728就不会内存溢出。

所以,方案是加上一个限制:长不超过6000px,宽不超过4000px,因为这个尺寸按上面的公式计算内存占用超不多116M。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲敲代码、落灯花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值