当表单包含大量输入时,截断/缺少表单数据?

时间:2013-11-01 15:59:54

标签: php html forms codeigniter nginx

背景
我正在使用在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 { {1}}输入,但firstname数组只有167.此外,$firstname变量的大小也不同--166。

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

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

对于它的价值,我在使用$lastnameapplication/x-www-form-urlencoded作为表单的内容类型时看到了相同的行为。

我错过了什么?

1 个答案:

答案 0 :(得分:5)

假设没有suhosin ......那么请参阅:max_input_varsmax_input_nesting_level

当人们想到PHP中的POST限制时,这些更新并且经常被忽略。

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

此外,这只是一个愚蠢的问题......

PHP max_input_vars Increasing the maximum post size 等。