表单包含大量输入时截断/丢失表单数据


Truncated/missing form data when form contains large number of inputs?

背景
我正在使用在Nginx上运行的CodeIgniter 2.1.4和PHP 5.3。我有一个 HTML 表单,表示本质上是同构数据行的内容。每个"行"都有多个<input />字段,每个字段具有相同的名称。下面是一个简化的示例:

<input type="text" name="firstname[]" />
<input type="text" name="lastname[]" />

所以,我有很多firstname[]输入,lastname[]输入等。提交表单后(操作POST),我像这样在控制器方法中检索数据(请注意,我使用的是 CodeIgniter):

$firstnames = $this->input->post('firstnames');
$lastnames = $this->input->post('lastnames');

这些变量是包含表单中相应行的值的数组,从这里开始,我对此数据进行了一些处理。

问题
所在当表单中的行数很大(几百行)时,生成的 PHP 数组的大小与表单中的输入数不匹配 -- 例如,表单可能有 200 个firstname输入,但$firstname数组只有 167 个。更重要的是,$lastname变量的大小也不同——166。

当表单的元素数量较少时,一切正常。

我的理论是,我在堆栈中的某个地方超过了某种最大大小设置或缓冲区,导致表单数据被截断。是否有我不知道的"最大表单大小"的PHP或CodeIgniter或nginx设置?

就其价值而言,我在同时使用application/x-www-form-urlencodedmultipart/form-data作为表单的内容类型时看到了相同的行为。

我错过了什么?

假设没有 suhosin...然后看:max_input_vars和max_input_nesting_level。

这些是较新的,当人们想到PHP中的POST限制时经常被忽视。

但是,如果它像你说的那样被截断,那么也许它只是你的post_max_size。

另外,这必须是一个欺骗性的问题...

PHP max_input_vars增加最大帖子大小等。。