问题背景
使用插件上传高清图片,用的插件base64转码的,上传失败,接口提示:413 (Request Entity Too Large)
问题分析与解决
首先想到的是nginx和php的服务器配置。
nginx配置:在http{... ...}添加如下配置
1 #允许客户端上传文件的最大限制单位是M 2 client_max_body_size 20m;
PHP配置
1 #修改配置文件 2 upload_max_filesize = 20M
修改之后服务器提示是没了,但是图片也没有上传成功,一步步定位发现,是过滤base64图片数据出了问题。
1 $imgdata=base64_decode(preg_replace('/data(.*?)base64,/','',$data));
当图片数据过大的时候,$imgdata为空,但是实际图片base64数据是有的,怀疑preg_replace函数匹配的字符串长度有限制,查阅资料确实有相关的问题。
解决发放①(修改PHP配置):
php.ini的文件配置
#对于字符串长度的限制 ;pcre.backtrack_limit=100000
为了上传图片没必要修改PHP配置文件,在修改控制器的脚本文件修改即可。
ini_set('pcre.backtrack_limit', 9999999999);
解决问题②(修改代码):
preg_*本身就不是最高效的写法,官方也建议使用其他函数代替。于是修改代码
#用字符串函数代替 $imgdata=base64_decode(str_ireplace('base64,','',strstr($data,'base64,')));
上传图片成功,问题解决。