有一次有个页面表单有很多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数据

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
返回
顶部