новый лимит в пределах php: 1000 полей на POST.Кто-нибудь знает, можно ли повлиять на число? - PullRequest
50 голосов
/ 03 января 2012

В более новых версиях PHP количество входных файлов в формуле (POST) будет ограничено 1000 (непроверенная информация). Похоже, что этот предел уже установлен в определенных сборках 5.2. Это вызывает много проблем в нашем интернет-магазине.

Знает ли кто-то больше об этом и может ли этот предел зависеть от параметров или переменных. Я только что нашел max_input_vars, но, похоже, это полная новая версия 5.4.RC4 И я не уверен, будет ли этот var для метода POST.

Ответы [ 8 ]

59 голосов
/ 03 января 2012
max_input_vars

- это попытка PHP решить некоторые проблемы безопасности, и когда она установлена, она ограничивает количество вводимых вами данных (таким образом, полей в ваших формах). Также остерегайтесь

max_input_nesting_level

И да - они настраиваются. Просто измените значения php.ini или htaccess.

30 голосов
/ 18 января 2012

Я тоже сталкивался с этой проблемой, работая над локальной установкой моего кода, и Debian Sid обновился до 5.4 RC4 PHP. Форма из более чем 7000 строк с флажками (!) Неожиданно обработала только 1001 из них в данных $ _POST ... головная боль в течение нескольких часов.

Внесено изменение в /etc/php5/apache2/php.ini:

.
max_input_vars = 5000

сохраните и перезапустите apache, и теперь все хорошо.

6 голосов
/ 23 мая 2016

Если вы не можете / не хотите увеличивать лимит сервера, вот другое решение

<!-- 10000 checkboxes outside the FORM. You do not want to post this -->
<input class="cbox" type="checkbox" value="1"  id="id-1" checked name="id[]">
....
<input class="cbox" type="checkbox" value="10000"  id="id-10000" checked name="id[]">
<form method="POST" action="postpage.php">
    <input type="hidden" id="cboxes" name="cboxes" class="cboxes" value="" />
    <input type="submit" onclick="return clicked();">
</form>

, затем с помощью jquery

<script>
function clicked() {
    var cb = $('.cbox:checked').map(function() {return this.value;}).get().join(',');
    $('#cboxes').val(cb);
    return true;
}
</script>

Используя POST, я проверил размещение 10000 записей.

На сервере

$cboxes = $_POST['cboxes'];
$cbox_exp =(explode(',', $cboxes));
print_r(count($cbox_exp)); //gives me 10000
3 голосов
/ 11 марта 2015

Просто хотел бы подвести итог и указать на несколько вещей:

1) Ограничения могут быть PHP, как упомянуто выше.

2) Ограничениями может быть веб-сервер, также упомянутый выше.

3) Suhosin ограничения применяются, только если он установлен.Настройки изменены в php.ini

4) Остерегайтесь ограничений длины URL-адреса браузера, если вы пытаетесь отправить столько данных в URL-адресе

Перезагрузите веб-сервер после изменения любых настроек сервера.

1 голос
/ 07 февраля 2014

Всегда хорошо просто систематизировать некоторые данные, которые вы отправляете, а не изменять это ограничение в PHP. Например, если вы отправляете материал через Ajax или через поле формы, просто зафиксируйте поле, вызывающее проблему.

Ограничение на количество полей, а не на длину, если это имеет смысл.

1 голос
/ 15 марта 2013

Видимо, это похоже на патч в среде Linux, вызывающий эту проблему. Если на вашем сервере есть этот патч 'suhosin', вероятно, проблема в этом. Также невозможно переопределить это во время выполнения, вместо этого включите в свой php.ini

suhosin.post.max_array_depth 

suhosin.post.max_array_index_length 

suhosin.post.max_name_length 

suhosin.post.max_totalname_length 

suhosin.post.max_vars 

suhosin.post.max_value_length 
0 голосов
/ 18 января 2014

Если вы не используете несколько или более 1000 полей ввода Вы можете объединять несколько входов с любым специальным символом, например @

<input type='text' name='hs1' id='hs1'>
<input type='text' name='hs2' id='hs2'>
<input type='text' name='hs3' id='hs3'>
<input type='text' name='hs4' id='hs4'>
<input type='text' name='hs5' id='hs5'>

<input type='hidden' name='hd' id='hd'>

используя любой скрипт (JavaScript или JScript)

document.getElementById("hd").value =     document.getElementById("hs1").value+"@"+document.getElementById("hs2").value+"@"+document.getElementById("hs3").value+"@"+document.getElementById("hs4").value+"@"+document.getElementById("hs5").value

с этой концепцией вы обойдете проблему max_input_vars. Если вы увеличите файл max_input_vars в php.ini, который вреден для сервера. Потому что они используют больше кэш-памяти сервера, а иногда и приводят к сбою сервера.

0 голосов
/ 03 января 2012

Эти изменения, как правило, хорошо документированы.Вы уверены, что он был перенесен на 5.2?Где ты так прочитал?Кажется более вероятным, что вы достигаете какого-то другого ограничения, такого как post_max_size или Apache LimitRequestFields , или даже мод безопасности PHP, такой как Suhosin .

(Более того, PHP 5.2 больше не поддерживается, поэтому я сомневаюсь, что он получит такое обновление.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...