【问题标题】:PHP max_input_varsPHP max_input_vars
【发布时间】:2012-05-05 10:22:29
【问题描述】:

我收到max_input_vars 错误消息。

我知道有一个 php.ini 设置可以从版本 5.3.9 开始更改此设置,但是,我正在运行版本 5.1.6。

当我查看我的 5.1.6 服务器的配置信息时,它显示 max_input_vars 值为 1000。

我的问题是:即使我运行的是 5.1.6,我也可以从 phpinfo() 看到此设置,但它不在 php.ini 文件中。这是否意味着该值在这个版本的 PHP 中是硬编码的,无法更改?

【问题讨论】:

  • 我在 PHP 5.1.6 源代码中根本没有看到对 max_input_vars 的任何引用,所以我不确定您在 phpinfo() 输出中是如何看到它的。据我所知,它在 5.3.9 之前是不存在的...
  • 许多参数具有硬编码的默认值,但您仍然可以分配新值。 php.ini 中没有明确设置的事实并不意味着您不能使用 php.ini 来更改它。
  • 您收到哪条错误消息?请将其添加到您的问题中。
  • 我从5.1.6 -> 5.3.3 升级,然后降级回5.1.6 后遇到了这个错误。抛出我是因为 5.1.6 php.ini 文件中不存在该选项。我添加了行,增加了数字,我的错误/问题消失了。

标签: php


【解决方案1】:

如果您使用类似 wodbydocker4phpdocker4drupal)或 lando 或试图找到“为什么 php.ini 不起作用”的答案"(和我一样),这些工具都在使用自己的方式将配置传递给 php

https://github.com/wodby/php#php-and-php-fpm-configuration

我试图设置 ma​​x_input_vars,在 wodby+docker-compose 中你可以这样做

  php:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      PHP_MAX_INPUT_VARS: 9999

【讨论】:

    【解决方案2】:

    只是为了补充。在使用 mod_suphp 的共享服务器上,我遇到了同样的问题。

    声明 4 max_input_vars(包括 suhosin),并没有解决它,它只是不断截断 1000 个变量(默认),并在 .htaccess 上声明“php_value max_input_vars 6000”引发错误 500。

    解决的方法是在 .htaccess 中添加以下内容,它将 php.ini 文件递归地应用于该路径

    suPHP_ConfigPath /home/myuser/public_html
    

    【讨论】:

      【解决方案3】:

      "PHP 消息:PHP 警告:未知:输入变量超过 1000。增加限制更改 php.ini 中的 max_input_vars。

      这个 php 配置参数 max_input_vars 不仅会影响您的 GET / POST / COOKIES 参数,它还会控制您的任何表单输入。

      要设置或更改其值,请按照以下步骤操作。

      1) 通过在 php.ini 文件中查看现有设置/值来检查它 使用定位 php.ini 文件

      <?php echo getinfo(); ?>

      找到下面的键:加载的配置文件:/etc/php/5.6/fpm/php.ini

      2) 以可编辑模式打开 php.ini 文件并搜索 max_input_vars 此行可能会在您现有的默认设置中注释为默认值 1000 ,因此请删除;取消注释并使用合适的值进行编辑,例如2500.

      3) 保存文件并使用以下命令重启 PHP 服务 sudo service php5.6-fpm restart

      同样,您可以轻松更新任何其他类似的 PHP 配置。

      【讨论】:

        【解决方案4】:

        向 Wordpress 添加菜单项时遇到了同样的问题。我在 Ubuntu 18.04、PHP 7.0 上使用 Wordpress 4.9.9。我只是取消注释以下行并将其增加到 1500 在/etc/php/7.0/apache2/php.ini

        ; How many GET/POST/COOKIE input variables may be accepted<br>
        max_input_vars = 1500
        

        然后使用以下内容进行更改:

        sudo apache2ctl configtest  #(if it does not return ok Apache will not start)
        sudo service apache2 reload
        

        希望对您有所帮助。

        【讨论】:

          【解决方案5】:

          php_value max_input_vars 6000

          “将此行放在您网站的 .htaccess 文件中。”

          【讨论】:

          • ...当然,如果您使用的是 Apache;其他网络服务器使用不同的约定。
          【解决方案6】:

          新的 Cpanels 块以查看 .htaccess 文件,或者如果您添加 .user.ini 您将无法看到它。但只需一点技巧,您就可以让它发挥作用。编辑例如 wp-config.php 并在 URL 栏中将 wp-config.php 替换为 .htaccess 现在您可以粘贴这些值并保存它。 enter image description here

          【讨论】:

            【解决方案7】:

            现在是 2018 年。当我必须发送超过 max_input_vars 的请求时,我就陷入了这个问题。我想出了一个解决方案,像我这样的新手在更改 max_input_vars 参数后忘记重新启动 php fpm 服务。因为我只尝试重启apache2服务,而不是php fpm

            1. /etc/php/7.0/fpm/php.ini 处取消注释代码并根据需要设置号码
              max_input_vars = 4000
            2. 重启php fpm服务,因为我用的是php 7。所以,
              sudo service php7.0-fpm restart

            希望对你有帮助
            Debian Stretchphp7.0 上测试

            【讨论】:

            • 我浪费了一整天的时间试图弄清楚如何确保应用更改并阅读了如此多的解决方案。他们都提到在对 php.ini 进行更改后,您应该重新启动 apache,这并没有什么不同。按照此解决方案中的说明重新启动 php7.2-fpm 解决了问题!
            • 仅作记录:Apache 的现代安装通常不会从嵌入式模块启动 PHP(几十年来一直是这样),而是从单独的 FastCGI 进程启动 PHP,通常phpX.Y-fpm。这与 PHP 一直在 nginx 下工作的方式是一致的,并且这些天通常被认为是“最佳”选项(当然,在某些极端情况下,将模块保留在 Apache 中可能是有意义的——但这些例外正在成为罕见...)
            【解决方案8】:

            请注意,您必须将它放在 Centos7 中的文件“.user.ini”中,而不是以前在 Centos6 中工作的“php.ini”中。您可以将“.user.ini”放在任何子目录中,以便仅影响该目录。

            .user.ini:

            max_input_vars = 3000
            

            在 Centos7 和 PHP 5.6.33 上测试。

            【讨论】:

              【解决方案9】:

              PHP网上参考:

              http://php.net/manual/en/info.configuration.php#ini.max-input-vars

              请注意,您不能在运行时使用函数ini_set(name, newValue) 设置此指令,例如

              ini_set('max_input_vars', 3000);
              

              它不会起作用。

              如文档中所述,此指令只能针对每个目录范围设置,这意味着通过 .htaccess 文件、httpd.conf 或 .user.ini(自 PHP 5.3 起)。

              http://php.net/manual/en/configuration.changes.modes.php

              将指令添加到 php.ini 或将以下行放入 .htaccess 将起作用:

              php_value max_input_vars 3000
              php_value suhosin.get.max_vars 3000
              php_value suhosin.post.max_vars 3000
              php_value suhosin.request.max_vars 3000
              

              【讨论】:

              • 或者将所有 3 个 suhosin 指令放在 php.ini 上就可以了。
              • 如果您可以访问 php.ini,则指令语法为 max_input_vars = 3000(+ 等号)。
              • @shorif2000 我在使用 .user.ini 文件的 IIS、PHP 7 w/wincache 中遇到了类似的问题。第一个问题是缓存。我在 .user.ini 中以随机顺序移动了这些行,直到它最终起作用。第二个问题,将 1000 更改为 2000 没有效果,但是当我将整行移到另一行时,它就起作用了。
              • 这适用于将 PHP 作为模块运行的 Apache。其他 Web 服务器或 Apache 配置可能无法使用/读取/理解 .htaccess,因此最好的选择可能是将这些指令放在 .user.ini 中(除非 that 也被阻止...)。跨度>
              • 请注意 - 如果您使用 fcgi 处理程序,.htaccess 中的 php_value 将不起作用。然后您需要使用 SetEnv 指令,如下所示: SetEnv php_value "max_input_vars=5000"
              【解决方案10】:

              使用此指令可降低使用哈希冲突的拒绝服务攻击的可能性。如果输入变量多于该指令指定的数量,则会发出 E_WARNING,并从请求中截断更多输入变量。

              我可以建议不要扩展默认值 1000,并通过序列化请求或按块发送请求来扩展应用程序功能。否则,您可以将其扩展到所需的配置。

              肯定需要在php.ini中设置

              【讨论】:

                【解决方案11】:

                是的,将其添加到 php.ini,重新启动 apache,它应该可以工作了。

                如果你想使用ini_set("max_input_vars",100),你可以即时测试它

                【讨论】:

                • 这不起作用,请参阅php.net/manual/en/info.configuration.php。必须按目录虚拟主机或 htaccess 设置,而不是 ini_set。
                • 我们可以通过ini_set函数设置这个变量。为什么这个答案被否决了? php.net/manual/en/info.configuration.php
                • @Ahmad 因为实际上您不能通过ini_set() 更改它。如果您仔细查看该页面,您会发现max_input_vars 被标记为PHP_INI_PERDIR——这意味着Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini——因此,不允许通过ini_set() 设置它!跨度>
                【解决方案12】:

                您可以将它添加到 php.ini,它应该可以工作 - 刚刚在 PHP 5.3.6 上测试过。

                【讨论】:

                • 谢谢,这值得知道,虽然我在 5.3.3 上并且不开心。
                • 感谢您提供的明显指针,说真的 - 我一直在寻找这个设置一个小时......直到我看到这个,添加它虚拟!
                • @Vaughany 请注意,如果您在 bitnami 堆栈上,则必须重新启动 php-fpm 以防您使用它。对 /opt/bitnami/php/etc/php.ini 进行更改后,简单地重新启动 apache 将无济于事,甚至可能不需要
                【解决方案13】:

                您需要取消注释 php.ini 文件中的 max_input_vars 值并增加它(exp. 2000),也不要忘记重新启动服务器,这将有助于 99,99%。

                【讨论】:

                • 这在 Ubuntu 12.04 上对我不起作用。将其设置为 3000 并使用 sudo service apache2 restart。我需要重启 Ubuntu 吗?
                • @motorbaby,如果您在 php.ini 中注释了此值,那么您只有取消注释并重新启动服务。不需要重新启动操作系统,但可以完成,但我认为这没有任何意义。如果您没有,请使用@lubosdz 解决方案。如果两者都没有帮助,请检查您是否在正确的位置进行更改,例如不知何故您有几个 php.ini 文件。您也可以尝试使用“sudo service apache2 reload”来重新加载配置
                • 线路在那里。我删除了; 并将值更改为3000。问题可能是浏览器的缓存。关闭 PHPMyAdmin 并在新选项卡中打开它现在可以工作了。谢谢!
                【解决方案14】:

                刚刚尝试使用 5.3.3 进行此修复,但没有任何变化。谷歌搜索我发现这个网页http://anothersysadmin.wordpress.com/2012/02/16/php-5-3-max_input_vars-and-big-forms/ 详细说明了需要更改的其他设置如果您的服务器使用 Debian 下的 Apache 所做的 Suhosin 补丁

                网站说明:

                因此,如果您想将此数字从默认值增加到 3000 数字是 1000,你必须在你的 php.ini 中输入这些行:

                max_input_vars = 3000 suhosin.post.max_vars = 3000 suhosin.request.max_vars = 3000

                我测试了它(在 /etc/php5/apache2 和 /etc/php5/cli 中都为 php.ini 添加了设置,并成功重启了 Apache)但 phpinfo 中仍然没有 max_input_vars 变量。

                一些网站指出 PHP 5.3.9 是第一个进行此更改的 PHP 版本,所以我的错首先是 RTM 不正确,尽管我很想看到有人报告它在上面的版本中工作5.3.3但低于5.3.9。

                【讨论】:

                • 谢天谢地,最新版本的 PHP (7.3+) 摆脱了 Suhosin 补丁(专为 PHP 5+ 设计),或者更准确地说,通过 Suhosin 修补的任何东西都不是“主线”的一部分php。不过现在有Suhosin-NG
                猜你喜欢
                • 2012-12-27
                • 2012-10-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-11-28
                • 2015-12-12
                • 1970-01-01
                • 2018-04-17
                相关资源
                最近更新 更多