php中的新限制:每个POST 1000个字段。有人知道,这个数字是否会受到影响?

时间:2012-01-03 09:32:49

标签: php post

在较新的PHP-Versions中,每个公式(POST)的input-fileds计数将限制为1000(未验证的信息)。它接缝已经在5.2的某些版本中安装了此限制。这在我们的网上商店引起了很多问题。

是否有人了解更多信息以及此限制是否会受到参数或Vars的影响。 我刚刚找到了max_input_vars,但它似乎是一个完整的新变量5.4.RC4而且我不确定,如果这个var将是POST方法的那个。

9 个答案:

答案 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。     因为它们使用更多的服务器缓存,有时它们会使服务器崩溃。