首页 > 技术文章 > php只能发送1000个post参数

codesay 2013-08-13 19:35 原文

先说一下这个题目是有问题的,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后发送?

 

推荐阅读