超高像素图片上传出现http错误解决办法
这是最近帮一个客户做网站的时候遇到的问题。
具体情况是:客户是摄影师,需要展示作品,图片是JPG格式的,图片尺寸也不大,每张图片大概4M~6M之前,但是上传的时候,出现http错误。
按照Wopus之前常规的解决办法:
1,检查php.inn的max_upload大小,默认是50M,调整到100M,重启nginx,问题没解决;
2,修改nginx.conf里的值,其实和php.ini一样的,依然没效果;
3,找另外3个独立网站,上传这张图片,也都出现http错误;
4,Wopus网站用的是阿里云的基础配置,上传7.2M的图片,没出现问题,但上传这张图片,也出现http错误。
到这里就开始转变思路,感觉是这张图片有问题,和客户沟通了一下才知道,原来图片是超高像素的,看了一下图片信息:
这张图片从体积上来看,才2.3M,但是像素却超过5亿个,最后确认应该是图片超高像素导致的问题。
搜索了一圈,没有类似的问题,更没有解决办法。回头看这四个网站的PHP版本都是5.6,于是找了一个PHP7.1的,一个PHP7.2的WordPress网站,发现图片只能在PHP7.2版本的WordPress上上传,于是用了服务器测试,从PHP 5.6.39开始测试,到PHP 7.2.13版本,最终确定:
高像素图片在PHP 7.2及其以上版本可以上传,不会再出现http错误。
既然到这里了,就去查询了一下PHP 7.2的新特性,应该是对高像素图片有做处理的算法,否则也不会这样。但没找到相关的内容,但却看到一些内容,这里引用到这篇文章里:https://www.wopus.org/wordpress-news/attention/5911.html
- PHP 官方 基准测试 显示 PHP 7 允许系统每秒执行2次请求,与 PHP 5.6 相比,几乎只是一半的延迟。
- Christian Vigh 也发布了一个 PHP 性能测试对比 他发现 PHP 5.2 比 PHP 7 慢了近 400%。
我们在 2018 运行了性能基准测试 PHP 5.6 vs PHP 7 vs HHVM。与上述基准测试类似,我们发现 PHP 7.2 与 PHP 5.6 相比每秒可执行几乎三倍数量的事务(请求)。
而WordPress官方也给出了运行WordPress最佳的PHP版本:PHP 7.2+。