最新消息:欢迎光临!

php表单截断

php findever 30浏览 0评论

业务场景是通过php做一个代理网关,反向代理到nginx后,发现nginx一直报400/408错误,且前端1分钟后收到http 504网关超时错误,一开始以为是nginx的超时设置问题,但是经过一系列的nginx超时、post body大小、缓冲区大小等等排查后发现问题依旧。

然后因为网关是可以正常获取到请求的,所以在网关端做了日志,对比发现,post的数据少了,于是百度之,发现php有个神奇的max_input_vars设置,默认值是1000,超过的表单就自动截断了,也没有报错啥的…很坑爹,我个人认为超过了应该报错,而不是自作主张进行截断,毕竟获取到一个缺胳膊少腿的post表单对业务来说可能造成更致命的错误,还不如让请求失败呢..

发现问题了,当然通过改大这个设置值重启一把就ok了,另外需要注意的是http_build_query函数也受这个配置值影响,同时,如果是php模拟去请求nginx,需要对请求参数做编码设置,否则可能出现400等错误:

// 使用PHP_QUERY_RFC3986编码,否则nginx无法通过,报400错误  
curl_setopt($aAccess, CURLOPT_POSTFIELDS, http_build_query($_POST, null, ‘&’, PHP_QUERY_RFC3986));

转载请注明:Findever » php表单截断

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址