2013-11-01 1 views
2

Фон
Я использую CodeIgniter 2.1.4 и PHP 5.3, работающие на Nginx. У меня есть 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-urlencoded, так и multipart/form-data в качестве типа содержимого для формы.

Что мне не хватает?

+0

Скорее всего у вас установлен патч безопасности Suhosin PHP. Он ограничивает количество допустимых входных параметров. – arkascha

ответ

4

Предполагая, что нет suhosin ... Тогда см .: max_input_vars и max_input_nesting_level.

Это новее и часто упускается из виду, когда люди думают о ограничениях POST в PHP.

Но если его усечение, как вы говорите, возможно, это просто ваш post_max_size.

Кроме того, это просто должно быть простофиля вопрос ...

PHP max_input_vars Increasing the maximum post size и т.д ..

+0

Проблема была 'max_input_vars'. Он был установлен в 1000, и каждый «ряд» в моей форме имел 6 входов. 1000/6 = 166,6; поэтому, когда у меня было более 167 «строк», я столкнулся с этой проблемой (и некоторые из моих массивов содержали 166 элементов, в то время как другие - 167). Спасибо за вашу помощь! – Donut

+0

Шахта была прокомментирована. Я просто не комментирую его и ставлю на 10000. Пока все хорошо. Если это ошибка, прошу прокомментировать. –

Смежные вопросы