Подтвердить что ты не робот

Новый предел в php: 1000 полей за POST. Кто-нибудь знает, может ли это число повлиять?

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

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

4b9b3361

Ответ 1

max_input_vars

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

max_input_nesting_level

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

Ответ 2

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

Сделано изменение в /etc/php 5/apache2/php.ini:

max_input_vars = 5000

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

Ответ 3

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

<!-- 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

Ответ 4

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

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

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

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

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

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

Ответ 5

По-видимому, это выглядит как исправление в среде 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 

Ответ 6

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

Предел находится в поле "число", а не "длина", если это имеет смысл.

Ответ 7

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

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

Ответ 8

Если вы не используете несколько или более 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'>

с помощью любого script (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 in php.ini, который вреден для сервера.   Потому что они используют больше кэш-памяти сервера, и иногда они будут разбивать сервер.