今天调一个接口,测试批量上传数据。上传数据用的是POST方式,分成一个多维数组上传。
但是,问题来了,最多可以批量上传多少条数据?PHP默认POST数据的限制是2M,但是并不代
表你就可以真的传2M以内的任意长度的数组。
PHP对输入变量是有限制的。默认php.ini里的max_input_vars的限制是1000.如果POST一个二维数组,每个二维子数组里有五个元素,那么,只能POST200个子数组。那
么多余的整么办?直接抛掉。。。。。真是简单粗暴。那么抛掉的策略是怎么样的呢?比如我POST上述数组210个,另外还POST一个变量type,那么服务器的$_POST参数里有啥?
一下数据是通过PHP CURL方式提交的,其他语言提交之后数据顺序不一定不变
$data['ztype'] = "ztype";
$data['aber'] = "aber";
$data['User'] = [];
for($i=0;$i<290;$i++)
{
$data['User'][] = [
'create_time'=>1,
'health_action_cat_id' => '5',
'detail' => '{"distance":44}',
'uid' => '5089',
'provider_id'=>$i,
];
}
如果提交的数组是这样的,那么,服务器的$_POST是这样的:
{
"ztype":"ztype",
"aber":"aber",
"User": [0-198]
}
那如果顺序变一下呢,
$data['User'] = [];
for($i=0;$i<290;$i++)
{
$data['User'][] = [
'create_time'=>1,
'health_action_cat_id' => '5',
'detail' => '{"distance":44}',
'uid' => '5089',
'provider_id'=>$i,
];
}
$data['ztype'] = "ztype";
$data['aber'] = "aber";
服务器的$_POST是这样的:
{
"User": [0-199]
}
额,这个…难怪容易出现诡异的情况。像其他语言(比如java),提交之后数据顺序是不确定的,所以,所以就会出现数据混乱,在获得1000个变量之后,PHP将抛弃后面的输入。如果下一个数组大小加起来已经超过1000,PHP也会果断抛弃…
在PHP中,POST上传数据时,受到max_input_vars配置的限制,默认值为1000,这意味着若POST一个二维数组,每个子数组包含5个元素,最多只能上传200个子数组,超出部分将被丢弃。这可能导致数据丢失和顺序混乱的问题,特别是当使用不同语言提交数据时,由于顺序不确定性,可能会引发诡异的错误。PHP在达到1000个变量限制后,会忽略后续输入,对于大型数据批量上传需谨慎处理。
464

被折叠的 条评论
为什么被折叠?



