【问题标题】:How can I permanently increase max_input_vars? The php.ini approach periodically gets overridden如何永久增加 max_input_vars? php.ini 方法会定期被覆盖
【发布时间】:2020-04-24 13:53:14
【问题描述】:

我管理一个 VPS,我想为 VPS 上托管的一个 WordPress 网站增加 max_input_vars。为此,我前往/var/www/vhosts/system/example.com/etc/ 并在随附的php.ini 文件中输入以下内容:

max_input_vars =4000

虽然这有效,但文件会定期被覆盖,因此我会丢失我的修改。

是否有替代方法来实现此修改,而不必担心php.ini 会被自动覆盖?

我尝试了以下方法,但都导致网站下线:

.htaccess

php_value max_input_vars 4000

wp-config

@ini_set( 'max_input_vars' , 4000 );

更新:2020 年 9 月 1 日

我也尝试将php_admin_flag max_input_vars On 输入/etc/apache2/apache2.conf 文件,然后将max_input_vars =4000 输入/var/www/vhosts/system/example.com/etc/php.ini 文件。

不幸的是,max_input_vars =4000 仍然被覆盖,默认值 1000 被重置。此外,这种方法会产生以下通知;在服务器内:

我会在这里做错了吗?

【问题讨论】:

  • 您不能使用ini_set 设置max_input_vars。要使其在.htaccess 中工作,您需要指定AllowOverride OptionsAllowOverride All
  • 我需要在哪里输入AllowOverride OptionsAllowOverride All

标签: php debian vps plesk


【解决方案1】:

所以,max_input_varsPHP_INI_PERDIR,这意味着它可以在 php.ini、.htaccess、httpd.conf 或 .user.ini 中设置(自 PHP 5.3 起)。 p>

PHP 只有一种防止本地指令覆盖的解决方案(本地指令覆盖 PHP 中的主指令,因此它会自下而上冒泡),那就是在指令上设置 admin_flag,从而防止主配置不会被本地覆盖。要做到这一点,这将取决于您使用的 PHP SAPI。

mod_php (Apache httpd)

您可以在您的 httpd 配置中使用 php_admin_flag max_input_vars On 在您的 apache 配置(即虚拟主机文件或 httpd.conf)中设置 php_admin_flag。这将防止 php.ini 中加载的值被 .htaccess 或 ini_set() 覆盖。

php-fpm (fastcgi)

您可以在 php-fpm 配置或单个池配置中使用 php_admin_flag[max_input_vars] = On 语法设置 php_admin_flag

注意

但是,在继续之前,请注意不要将此指令设置得太高,因为它可能会导致 PHP 中已知的 拒绝服务 攻击。从手册...

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

【讨论】:

  • 运行apachectl -V 命令后,似乎可以在/etc/apache2/apache2.conf 找到服务器配置文件。这是您在回答中提到的 Apache httpd 文件的 Ubuntu 变体吗?如果是这样,我是否只需要在这个apache2.conf 文件的底部输入php_admin_flag max_input_vars On?这个文件不会自动更新吗?这将如何防止max_input_vars =4000 条目在位于/var/www/vhosts/system/example.com/etc/ 目录中的php.ini 文件中被覆盖?它会停止更新php.ini 文件吗?
  • 它不会阻止 php.ini 的更新。但它会阻止任何低于 php.ini 的级别覆盖 php.ini。在 PHP 中是这样的(按加载配置的顺序) 1. 硬编码 PHP 默认值 2. php_admin_value 配置 3. php.ini 4. 运行时用户级 php ini 或 .htaccess 类型配置 5. 运行时 ini_set。所以如果你想阻止 php.ini 改变它,你也可以设置一个php_admin_valuephp_admin_flag 只是强制加载的配置不能被运行时配置指令覆盖,例如 .htaccess 或 ini_set() 中的配置指令。
  • 感谢您一直以来的支持。不幸的是,您的建议会触发错误并导致 max_input_vars =4000 仍然被覆盖。我会误解你的指导吗?我已经用我看到的错误消息更新了我的问题。
  • mod_php 加载后需要设置
  • 我试图更好地理解您的答案,但我觉得我只是在这里让自己感到困惑。你说This will prevent the loaded value from your php.ini to be overridden by .htaccess。我假设这是每个网站的httpdocs 文件夹中的.htaccess?如果是这样,我似乎无法更改.htaccess 文件中的max_input_vars,而且我希望能够覆盖php.ini 文件。我只是希望能够更改 max_input_vars 而不会被覆盖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 2014-06-13
  • 2015-09-18
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
相关资源
最近更新 更多