扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
今天某用户反馈发布一条内容后,整个后台管理列表打不开,而且网站首页打开也是空白的。通过定位发现是这条内容上传了一张近一亿像素的图片,系统在进行图片缩略处理的时候直接卡死了(该系统基于thinkphp开发,卡在了\think\Image::open方法处)。那么如何避免这种问题呢,主要有如下几种解决方案:
1、最粗暴的方式:增加脚本运行内存限制和时间限制。
在默认状态下php安装后,脚本的的内存限制是128M,如果一次处理过大的任务,则可能超过所允许的内存量而出错。可以在php代码处加上内存限制参数值设定,如下:
ini_set("memory_limit", "512M"); //默认一般是128M
也可以直接修改php的配置文件php.ini进行修改
memory_limit = 512M
这种方式适合网站性能要求不是特别高且服务器内存不是太小的时候,否则如果频繁运行较大任务占用内存资源,势必会影响系统性能。
2、把压力转给他人的方式:使用图片云存储,在云端进行图片处理。
系统图片直接上传到专门的图片存储云服务(如阿里云OSS等),这些云服务有丰富的在线处理功能,如常用的图片压缩、剪切等,云服务提供的功能可以完全满足绝大多数场景的需求。而且云服务作为专业的服务平台,一般已经考虑了各种极端情况,比我们自己写的代码要考虑得更加全面。最重要的是,交给云服务处理这些任务不占用任何网站系统本身的系统资源。
3、经济的方式:上传前进行图片压缩。
除了个别需要使用原图的场景,在现实应用中并不需要使用图片原图(比如文章配图、封面图等),一般不超过2000×2000px,没必要存储超大的原图(现在即便手机拍出来的图片动不动就是上亿像素的)。所以可以在上传到系统服务端前,在用户前端就完成图片的压缩上传。
这样对于网站系统来讲,不管是存储在服务器本地还是云存储服务上,都可以节省大量的带宽资源和计算资源;对于网站使用的用户来讲,上传的时候也可以减少带宽流量的浪费;是一种很经济的解决方式。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流