PHP post_max_size 覆盖upload_max_filesize

Posted

技术标签:

【中文标题】PHP post_max_size 覆盖upload_max_filesize【英文标题】:PHP post_max_size overrides upload_max_filesize 【发布时间】:2011-12-06 22:28:06 【问题描述】:

在我的网站主机中,我已经看到(通过 phpinfo)

post_max_size = 8Mb upload_max_filesize = 16Mb

这让我想到我应该能够上传最大 16Mb 的文件。 但是,当我通过 post 方法(正常)执行此操作时,post_max_size 接管并声明我发送了太多。

什么方法可以发送16Mb大的文件? GET - PUT - 其他?

希望有人可以为我澄清这一点。

西蒙

【问题讨论】:

【参考方案1】:

upload_max_filesize 是任何单个文件的限制。 post_max_size 是整个请求体的限制,可以包含多个文件。

鉴于post_max_size = 20Mupload_max_filesize = 6M,您最多可以上传3 个6M 的文件。如果改为post_max_size = 6Mupload_max_filesize = 20M,那么您只能在达到 post_max_size 之前上传一个 6M 文件。 upload_max_size > post_max_size 没有帮助。

如何识别越过post_max_size 并不明显。 $_POST$_FILES 将为空,但 $_SERVER['CONTENT_LENGTH'] 将 > 0。如果客户端没有上传任何帖子变量或文件,则 $_SERVER['CONTENT_LENGTH'] 将为 0。

【讨论】:

【参考方案2】:

通过POST文件上传完成(通常还有其他方法)。查看包含文件上传字段的表单的方法属性;)

任何相关设置的最低限制取代更高的设置:

post_max_size upload_max_filesize memory_limit

请参阅Handling file uploads: Common Pitfals,其中详细解释了这一点以及如何计算这些值。

【讨论】:

【参考方案3】:

发送文件上传的正常方法是 POST,因此post_max_size 也应该是 16 Mb 或更多。

顺便说一句,memory_limit 也起作用。它应该大于 16Mb,但由于默认值为 128Mb,因此您不会看到此问题。示例php.ini 配置:

post_max_size = 16M
upload_max_filesize = 16M
memory_limit = 128M

如果您有权访问,请在php.ini 中更改这些值,否则您可以尝试在.htaccess 文件中更改它们。

php_value upload_max_filesize 16M
php_value post_max_size 16M 

这只有在AllowOverride 设置允许的情况下才有效。否则,您必须询问您的托管公司。

【讨论】:

【参考方案4】:

post_max_size:

设置允许发布数据的最大大小。此设置也会影响文件上传 要上传大文件,这个值必须大于upload_max_filesize 一般来说memory_limit应该大于post_max_size。 PHP 默认值:8M

upload_max_filesize:

上传文件的最大大小 PHP 默认:2M

memory_limit > post_max_size > upload_max_filesize

PHP 默认值:128M > 8M > 2M

默认情况下,post_max_size 应该是 upload_max_filesize 的 4 倍。反过来 memory_limit 应该是 post_max_size 的 16 倍

【讨论】:

【参考方案5】:

您的服务器配置设置允许用户上传最大 16MB 的文件(因为您已设置 upload_max_filesize = 16Mb),但post_max_size 仅接受最大 8MB 的发布数据。这就是它抛出错误的原因。

引自official PHP site:

    要上传大文件,post_max_size 值必须大于upload_max_filesize。

    memory_limit 应该大于 post_max_size

您应该始终将您的 post_max_size 值设置为大于 upload_max_filesize 值。

【讨论】:

【参考方案6】:

更改 php.ini max_input_vars 1000

【讨论】:

以上是关于PHP post_max_size 覆盖upload_max_filesize的主要内容,如果未能解决你的问题,请参考以下文章

为啥 .htaccess 或 php.ini 覆盖 /etc/php.ini 不起作用?

如何优雅地处理超过 PHP `post_max_size` 的文件?

覆盖 upload_max_filesize

覆盖 upload_max_filesize

post_max_size 不变

php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项