仅增加一个 PHP 页面的 Max_input_vars 限制

Posted

技术标签:

【中文标题】仅增加一个 PHP 页面的 Max_input_vars 限制【英文标题】:Increase Max_input_vars limit for only one PHP page 【发布时间】:2016-11-28 07:09:05 【问题描述】:

有什么办法可以只增加一个 php 页面的 PHP max_input_vars 限制。我正在使用 CSV 上传和提取功能。其中 csv 数据将使用插入查询保存到数据库中。但是当我尝试使用更大的 CSV 数据(例如大约 9000 个条目)时,我收到了这样的错误:

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

我知道我们需要更改 php.ini 或 .htaccess 中的限制值,但我不想更改整个项目的限制以维护安全性。那么有没有办法只为这个功能改变它??

【问题讨论】:

如果您使用的是 CSV 格式的文件,为什么不使用LOAD DATA 来导入呢?这比一个巨大的声明要少得多。 【参考方案1】:

没有办法做到这一点。您必须在php.ini 文件中更改它,因为即使ini_set 也无法更改它。

max_input_vars 具有PHP_INI_PERDIR 的可更改模式,这意味着它不能使用ini_set 更改(仅在 php.ini、.htaccess 或 httpd.conf 中)

(Source)

但是,您可以通过将此行添加到您的 .htaccess 来临时更改该设置:

php_value max_input_vars 3000

(Source)

【讨论】:

马丁 S.:好的。实际上我对这个输入变量有点困惑。当多选下拉列表包含近 9000 个条目时,我收到此错误。但是在 Post 上,我们将选择选项值作为数组传递给一个输入元素,对吗?这是选择元素的名称。您能否描述一下这个 max_input_vars 限制的用途?是可以通过 POST 传递的输入元素的数量吗?如果是这样,为什么我的选择下拉菜单显示该错误?? @USER5615 它是每个超全局允许的变量数量。如果您不向我显示您的代码,我不知道为什么会出现该错误,但我猜您通过 POST 传递了太多变量。 一个大的多选导致这个问题的原因是每个选择的选项都作为fieldname[]=value传递。请注意,这看起来几乎像一个单独的表单域。在解析数据并将其加载到 vars 中时,这会被视为一个数组,但它仍将每个分配都计为一个“输入 var”。

以上是关于仅增加一个 PHP 页面的 Max_input_vars 限制的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 php 代码更改页面吗

自定义 404 错误页面——仅适用于 PHP 页面

PHP - 使用登录系统保护仅限会员的页面

在外部 php 页面上仅获取 wordpress 页脚

PHP Wordpress:仅列出特定父页面的子页面

php 列出所有子页面(仅显示“已发布”页面)