preg_*匹配的字符串长度限制问题以及nginx,php上传文件过大问题

本文介绍了解决使用Base64编码的大尺寸图片上传失败问题的方法,包括调整服务器配置和改进图片数据处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  问题背景

     使用插件上传高清图片,用的插件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,')));

     上传图片成功,问题解决。

转载于:https://www.cnblogs.com/IT--Loding/p/6699466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值