为什么 PHP 官方手册错误地指出“一般来说,'memory_limit' 应该大于 'post_max_size'?”

Why does the official PHP manual incorrectly state, “Generally speaking, 'memory_limit' should be larger than 'post_max_size'?”

我在 seeing this recent SuperUser question on the role memory_limit plays in file upload limits 之后在这里发布这个问题。

官方 PHP 手册在 post_max_size

下说明如下

Generally speaking, memory_limit should be larger than post_max_size.

如果您在某种程度上理解 PHP 以及 memory_limitpost_max_size 的区别,那么此官方建议毫无意义。 memory_limit 是一个与 PHP 进程内存限制有关的设置,而 post_max_size 仅与通过 PHP 上传到文件系统的项目的最大大小有关。

现在可以 POST 大到 PHP 脚本并将其存储在 PHP 内存中。但几乎没有人这样做。当绝大多数文件 POST 编辑到 PHP 脚本时,该文件将通过 PHP 流式传输并保存到文件系统。

那么为什么要给出这个“一般来说……”的建议呢?或者,经过 20 多年的 PHP 开发,我是否已经完全失去理智,并且我能够以某种方式将大文件上传到 LAMP 堆栈应用程序,而 memory_limit 不会超过 post_max_size

如果发现 a similar question here and this answer as well as this other answer that confirms what I am saying. And heck, here is another answer to another question 涉及到答案明确指出“否”的主题。

那为什么官方PHP手册说memory_limitpost_max_size有什么关系呢?

是的,我知道在 一些 情况下,这个“一般来说……”建议是有效的,但我发现它混淆了多少在线资源(见上文)与PHP手册中所说的相矛盾。或许应该针对不同的使用案例制定更具体的“一般”建议?

因为如果你使用 $_POST 数组,它需要存储在内存中,特别是对于大的 POST 数据。因此它需要适合内存。

您也可以使用流包装器 php://input 来减少内存使用,而不是 $_POST