php中的新限制:每个POST 1000个字段。 有人知道这个数字是否会受到影响?
在较新的PHP版本中,每个公式(POST)的输入文件数将限制为1000(未经验证的信息)。 它表明在某些5.2的内部版本中已经安装了此限制。 这在我们的网上商店中引起很多问题。
是否有人对此有更多了解,以及此限制是否会受到参数或变量的影响。我刚刚找到max_input_vars,但它似乎是5.4.RC4的一个完整的新var。我不确定,该var是否适合POST方法。
Peter asked 2020-02-04T23:46:13Z
8个解决方案
59 votes
max_input_vars
这是PHP尝试解决一些安全问题的尝试,并且在设置时会限制您的输入数量(因此,表单中的字段)。 也要当心
max_input_nesting_level
是的-它们是可配置的。 只需编辑您的php.ini或htaccess值。
Slavic answered 2020-02-04T23:46:32Z
31 votes
我也遇到了这个问题,正在对代码进行本地化安装,并且Debian Sid已升级到5.4 RC4 PHP。 带有复选框(!)的7000行以上的表格突然只在$ _POST数据中处理了其中的1001行……头花了几个小时。
在/etc/php5/apache2/php.ini中进行了更改:
max_input_vars = 5000
保存并重新启动apache,现在一切都很好。
Onyx answered 2020-02-04T23:47:01Z
6 votes
如果您不能/不想增加服务器限制,这是另一种解决方案
....
然后使用jQuery
function clicked() {
var cb = $('.cbox:checked').map(function() {return this.value;}).get().join(',');
$('#cboxes').val(cb);
return true;
}
我使用POST测试过帐10000条记录。
在服务器中
$cboxes = $_POST['cboxes'];
$cbox_exp =(explode(',', $cboxes));
print_r(count($cbox_exp)); //gives me 10000
Ruben Benjamin answered 2020-02-04T23:47:34Z
3 votes
只是想总结并指出几件事:
1)限制可以是如上所述的PHP。
2)限制也可以是上面提到的Web服务器。
3)Suhosin限制仅在安装后才适用。 设置在php.ini中已更改
4)如果尝试在URL中提交那么多数据,请注意浏览器URL长度限制
更改任何服务器设置后,重新启动Web服务器。
Chris answered 2020-02-04T23:48:16Z
1 votes
显然,它看起来像是导致此问题的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
dots-do-matter answered 2020-02-04T23:48:36Z
1 votes
只对要提交的某些数据进行字符串化总是好事-而不是在PHP中更改此限制。 例如,如果您要通过Ajax或表单字段发送内容,只需对引起问题的字段进行字符串化处理。
限制是在字段的“数量”上,而不是在“长度”上(如果有道理)。
Ashesh answered 2020-02-04T23:49:01Z
0 votes
这些更改往往有据可查。 您确定已将其反向移植到5.2吗? 你在哪里读的? 您似乎更有可能达到其他一些限制,例如post_max_size或Apache的LimitRequestFields,甚至是类似Suhosin的PHP安全模块。
(此外,不再支持PHP 5.2,因此我怀疑它会得到这样的升级。)
Álvaro González answered 2020-02-04T23:49:25Z
-1 votes
如果您不使用多个或超过1000个输入字段您可以将多个输入与任何特殊字符连接起来,例如max_input_vars
使用任何脚本(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,这对服务器有害。 因为它们使用更多的服务器缓存内存,有时它们会使服务器崩溃。
harpej answered 2020-02-04T23:49:55Z