Фон
Я использую 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
в качестве типа содержимого для формы.
Что мне не хватает?
Скорее всего у вас установлен патч безопасности Suhosin PHP. Он ограничивает количество допустимых входных параметров. – arkascha