在较新的PHP-Versions中,每个公式(POST)的input-fileds计数将限制为1000(未验证的信息)。它接缝已经在5.2的某些版本中安装了此限制。这在我们的网上商店引起了很多问题。
是否有人了解更多信息以及此限制是否会受到参数或Vars的影响。 我刚刚找到了max_input_vars,但它似乎是一个完整的新变量5.4.RC4而且我不确定,如果这个var将是POST方法的那个。
答案 0 :(得分:58)
max_input_vars
是尝试PHP解决某些安全问题,在设置时,它会限制您的输入数量(因此,表单中的字段)。还要注意
max_input_nesting_level
是的 - 它们是可配置的。只需编辑您的php.ini或htaccess值。
答案 1 :(得分:30)
我也遇到过这个问题,正在进行代码的本地化安装,Debian Sid已升级到5.4 RC4 PHP。一个7000多行带复选框(!)的形式突然只在$ _POST数据中处理了1001个这样的数据......头部刮了几个小时。
在/etc/php5/apache2/php.ini中进行了更改:
max_input_vars = 5000
保存,然后重新启动apache,现在一切都很好。
答案 2 :(得分:6)
如果你不能/不想增加服务器限制,这是另一种解决方案
<!-- 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 :(得分:2)
只是想总结并指出一些事情:
1)如上所述,限制可以是PHP。
2)限制可以是上面提到的Web服务器。
3) Suhosin 限制仅在安装时适用。设置在php.ini中更改
4)如果您尝试在URL
中提交那么多数据,请注意浏览器URL长度限制更改任何服务器设置后重新启动Web服务器。
答案 4 :(得分:1)
显然它看起来像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
答案 5 :(得分:1)
将字符串化为您提交的一些数据总是好的 - 而不是在PHP中更改此限制。例如,如果您通过Ajax或表单字段发送内容,只需将导致问题的字段字符串化。
限制是在字段的'数字'而不是'长度',如果这是有道理的。
答案 6 :(得分:0)
这些变化往往有很好的记录。你确定它被反向移植到5.2吗?你在哪里读到的?您似乎更有可能遇到其他限制,例如post_max_size或Apache的LimitRequestFields,甚至是Suhosin等PHP安全模式。
(此外,不再支持PHP 5.2,所以我怀疑它会得到这样的升级。)
答案 7 :(得分:0)
如果像我一样使用Dreamhost,则可以在/home/<<siteuser>>/.php/<<X.Y>>
内创建一个phprc文件(siteuser =您的网站所运行的用户,而X.Y = php版本,例如7.2)
我在phprc中添加了max_input_vars = 2000
如果您使用的是PHP 7.2版,则必须杀死所有PHP进程才能使用killall -9 php72.cgi
生效
此处更多信息https://help.dreamhost.com/hc/en-us/articles/214200668-How-do-I-create-a-phprc-file-via-SSH-
答案 8 :(得分:-1)
如果您不使用多个或超过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
。
因为它们使用更多的服务器缓存,有时它们会使服务器崩溃。