先说一下这个题目是有问题的,php只能发送1000个$_REQUEST参数。
这其中包括了$_GET, $_POST, $_COOKIE.
我是在发送1180个post参数时发现,无论怎样只能发送1000个。
Q1:为什么php只能发送1000个请求参数?
A1:在HTTP协议中对此是完全没有规定的。也就是1000的限制和http协议无关。
主要原因:“通过调用Hash冲突实现各种语言的拒绝服务攻击漏洞”。
PHP基于开源的hash算法,在设定特殊的key情况下,可以导致hash碰撞,最终数组退化为链表。
这样每次数组插入元素操作,均变为O(n)时间复杂度。CPU利用率飙升,最终导致服务器无法提供服务。
1000个限制来源于php.ini中的max_input_vars参数,可以通过修改配置文件,增加提交参数数目。
但这个过程指标不治本。
1. 一次发送1000多个参数是否有问题?
2. 这些参数是否有共性,是否可以分次发送?
$data = $query->fetchAll(PDO::FETCH_ASSOC); $cnt = count($data); $step = 100; for($i=0; $i < $cnt; $i+=$step) { $postData = array_slice($data, $i, $step); $ret = request($url, 'POST', $postData); llog("i, step: ".$i.', '.$step.', ret='.var_export($ret,true)); }
3. json_encode后发送?