В новых PHP-версиях количество входных заявок на формулу (POST) будет ограничено 1000 (непроверенная информация). Это означает, что этот предел уже установлен в некоторых сборках по 5.2. Это вызывает множество проблем в нашем интернет-магазине.
Кто-то знает об этом больше, и если на этот предел могут влиять параметры или Vars. Я просто нашел max_input_vars, но, похоже, это полный новый var 5.4.RC4. И я не уверен, если этот var будет одним из методов POST.
max_input_vars
является попыткой PHP решить некоторые проблемы безопасности, и когда он установлен, он ограничивает количество входных данных (таким образом, поля в ваших формах). Также остерегайтесь
max_input_nesting_level
И да – они настраиваются. Просто отредактируйте свои значения php.ini или htaccess.
Я тоже столкнулся с этой проблемой, работая над локализованной установкой моего кода, а Debian Sid обновил до 5.4 RC4 PHP. Форма более 7000 строк с флажками (!) Вдруг обрабатывала только 1001 из них в данных $ _POST … голова царапается в течение нескольких часов.
Сделано изменение в /etc/php5/apache2/php.ini:
max_input_vars = 5000
сохранить и перезапустить apache, и теперь все хорошо.
Если вы не можете / не хотите увеличить лимит сервера, вот еще одно решение
<!-- 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
Просто хотел подвести итог и отметить несколько вещей:
1) Ограничения могут быть PHP, как указано выше.
2) Ограничениями может быть также упомянутый выше веб-сервер.
3) Ограничения Сухозина применяются только в том случае, если они установлены. Настройки изменены в php.ini
4) Остерегайтесь ограничений длины URL-адресов браузера, если вы попытаетесь представить столько данных в URL-адресе
Перезагрузите веб-сервер после изменения настроек сервера.
По-видимому, это похоже на исправление в среде 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
Всегда полезно просто подкрепить некоторые из данных, которые вы отправляете, а не изменять этот предел в PHP. Например, если вы отправляете материал через Ajax или через поле формы, просто строгите поле, вызывающее проблему.
Предел находится в поле «число», а не «длина», если это имеет смысл.
Эти изменения, как правило, хорошо документированы. Вы уверены, что он был передан в 5.2? Где вы это читали? Кажется более вероятным, что вы нажимаете какой-то другой предел, такой как post_max_size или LimitRequestField Apache, или даже модем безопасности PHP, такой как Suhosin .
(Более того, PHP 5.2 больше не поддерживается, поэтому я сомневаюсь, что он получит такое обновление.)
Если вы не используете несколько или более 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
который вреден для сервера. Потому что они используют больше кэш-памяти сервера, и иногда они будут разбивать сервер.