当前位置: 首页 > 后端技术 > PHP

php上传图片导致内存溢出允许内存大小为...bytes

时间:2023-03-29 20:02:41 PHP

【场景】上传图片是网站开发的常见需求——用户上传图片=>后端处理图片(压缩、生成缩略图、裁剪、添加水印等...)=>保存在特定的文件夹中,在这个过程中,有时上传大图片时,会出现“Allowedmemorysizeofxxxbytes”的错误,即内存溢出。【原因】google了一下,主要是可用内存太少,可以通过修改php.ini的相关参数来降低内存限制。https://stackoverflow.com/all...,虽然这是一个解决方案,但是默认设置至少是64M,再大的图片也不会那么大。因此,我找到了另外一个观点(传送门)——php处理图片时(比如使用php的gd库的函数,比如imagecreatetruecolor()),占用内存的大小不依赖于图片的大小,而是关于分辨率。具体公式为:(图片分辨率,图片对象的宽高)X(图片的通道数,一般为3)X1.7。例如一张照片的大小只有3.1M,分辨率却高达3994X2443,占用内存为399424433*1.7=49762444.2!【总结】本文主要讨论内存溢出的错误。平时调用第三方库进行图片处理时,指定分辨率可以避免不必要的错误。如果大家还有其他的见解或者补充,欢迎在下方留言讨论~