【问题标题】:PHP and (too) many input fieldsPHP 和(太多)输入字段
【发布时间】:2012-04-16 04:14:03
【问题描述】:

我有一个大约 1500 个输入字段*(文本或隐藏)的 html 表单。 form.action 是 POST 并且每个输入字段都有一个唯一的名称(没有 name=foo[])。

每当我在提交表单后尝试在 PHP 中打印 $_REQUEST 的每个变量时,只会打印前几个条目。实际上,$_REQUEST 变量只包含 1001 个项目(因此大约缺少 500 个字段)。

知道为什么会这样吗?

由于数据是通过 post not get 发送的,所以 url-limit 不是问题。所以我认为它与网络服务器的配置有关,并且请求太大了。但是将 LimitRequestBody 设置为 0 并不会改变结果中的任何内容。

就这个 ​​PHP 数组使用的内存而言,我只看到大小仅受整体内存的限制,应该绰绰有余。 (key每个约20chars,value每个约6chars)

我错过了什么吗?

*如果您想知道:导航包含大约 750 个条目,每个条目有 2 个字段(一个位置用于排序,一个位置用于嵌套如果父级)

【问题讨论】:

  • 你需要 1500 个输入字段来做什么?
  • 您使用什么版本的 PHP 和 Web 服务器?
  • 如何将表格分成几部分......无论如何,1500 太多了,无法一次更改。它对用户和服务器都更好。
  • 尝试增加 php.ini 中的 post_max_size (php.net/manual/en/ini.core.php#ini.sect.data-handling)
  • 也许你可以做一些客户端优化。您只能发布编辑/更改的输入字段,而不是发布所有内容。

标签: php arrays input


【解决方案1】:

从 PHP 5.3.9 开始,有一个名为“max_input_vars”的新配置设置限制了输入变量的数量。默认设置为 1000。还要检查是否安装了Suhosin,因为还有一个similar setting

不过,我建议尽可能减少字段数量。

【讨论】:

  • 已安装 PHP 5.3.3-7,但仍然在配置中获得了这些属性。将它们设置为 2000 确实解决了问题
  • PHP 5.3.3-7 是由 Debian 安全团队维护的旧发行版,基本上是 PHP 5.3.3 + 最新的安全修复程序。
【解决方案2】:

尝试覆盖 php_flag max_input_vars。

添加到您的 .htaccess 文件或更改 php.ini

php_flag max_input_vars 1500

还有一个用于嵌套的标志

php_flag max_input_nesting_level 64

【讨论】:

    【解决方案3】:

    也许您超出了 POST 的大小?你可以使用mime multipart,就像人们发布文件一样。

    【讨论】:

    【解决方案4】:

    检查您的 php.ini 配置中的 post_max_size 值 - 也许您已经超过了它?

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多