有一次有个页面表单有很多input文本框,提交到程序端,打印发现提交数据缺失一部分,只显示前1000个数据。首先通过抓包查询请求数据,发现数据都是正常的,没有缺失。关键是程序也没有什么错误提示信息。通过打印 file_get_contents('php://input') 值发现数据都是有的,发现解析成 $_POST 这一步数据缺失了,通过查询手册得知,php中有个参数max_input_vars,这个配置参数控制 GET/POST/COOKIE 最大可接收数量。默认这个值为1000。
下面给出几种解决方法:
1、修改php.ini配置
帮max_input_vars参数值调大。如
max_input_vars = 10000
2、通过接收到的数据 自己封装一个函数进行解析
function parse_str_base($str){
$arr=array();
$strArr=explode('&',$str);
foreach($strArr as $v){
list($name,$value)=explode('=',$v,2);
$name=urldecode($name);
$value=urldecode($value);
if(preg_match_all('/\[([^\]]*)\]/m',$name,$matchs)){
$name=substr($name,0,strpos($name,'['));
//$key=array_merge((array)$name,$matchs[1]);
if(empty($arr[$name])) $arr[$name]=array();
$target=&$arr[$name];
foreach($matchs[1] as $v){
if($v==''){
$target=&$target[];
}else{
$target=&$target[$v];
}
}
$target=$value;
}elseif($name){
$arr[$name]=$value;
}else{
$arr[]=$value;
}
}
return $arr;
}
$_poststr=file_get_contents('php://input');
$_POST2=parse_str_base($_poststr);
#数据通过 $_POST2来调取
ps:不能通过parse_str来解析原始数据,因为这个函数也受max_input_vars这个值控制。
3、找前端将表单提交方式改为提交json数据
后台接收程序解析传递过来的json数据
发表评论 取消回复