在较新的PHP版本中,每个公式的输入文件数(POST)将限制为1000(未经验证的信息)。这一限制已经安装在5.2的某些版本中。这给我们的网店带来了很多问题。
有人对此了解更多吗?这个限制是否会受到参数或变量的影响。我刚刚找到了max_input_vars,但它似乎是5.4.RC4的一个全新的var。我不确定这个var是否会是POST方法的var。
max_input_vars
是PHP解决一些安全问题的一种尝试,当设置时,它会限制输入的数量(从而限制表单中的字段)。还要注意
最大输入目标电平
是的,它们是可配置的。只需编辑php.ini或htaccess值。
我也遇到了这个问题,我正在进行代码的本地化安装,Debian Sid已经升级到5.4 RC4 PHP。一个包含7000多行复选框(!)的表单突然只处理了$_POST数据中的1001行。。。挠头几个小时。
在/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) Suhosin限制仅适用于已安装的情况。php.ini 中的设置已更改
4) 如果你试图在URL 中提交那么多数据,请注意浏览器URL长度限制
更改任何服务器设置后重新启动web服务器。
显然,它看起来像是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或Apache的LimitRequestFields,甚至是像Suhosin这样的PHP安全模块。
(此外,不再支持PHP 5.2,所以我怀疑它是否会得到这样的升级。)
如果你像我一样使用Dreamhost,你可以在/home/<<siteuser>>/.php/<<X.Y>>
中创建一个phprc文件(siteuser=你的网站运行的用户,X.Y=php版本如7.2)
在phprc中,我添加了max_input_vars = 2000
如果使用的是PHP 7.2版,则必须使用killall -9 php72.cgi
杀死所有PHP进程才能生效
更多信息请点击此处https://help.dreamhost.com/hc/en-us/articles/214200668-How-do-I-create-a-phprc-file-via-SSH-
如果不使用多个或超过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
问题。如果在php.ini
文件中增加max_input_vars
,则对服务器有害。因为它们使用更多的服务器缓存,有时还会使服务器崩溃。