底线:
我是否需要担心设置 post_max_filesize
>> memory_limit
?
详情:
This answer建议上传的文件不需要在 php 的 memory_limit 之内。 php docs建议整篇文章应该在 php 的内存限制之内。
我发现这些文档令人惊讶,我希望有人能详细说明。例如采用以下 php 配置:
; config A
memory_limit = 50M
upload_max_filesize = 100M
post_max_filesize = 1000M
max_file_uploads = 10
和
; config B
memory_limit = 50M
upload_max_filesize = 10M
post_max_filesize = 1000M
max_file_uploads = 100
通过这些配置,我希望能够:
- 将 10x100mb 文件上传到服务器 A,
- 将 100x10mb 文件上传到服务器 B。
- 处理上传到服务器 A 的 10 个文件中的任何一个都是一个问题(50M 包中有 100Ms 文件……)。
- 使用上传到服务器 B 的 100 个文件中的任何一个都可以(10 < 50)。
这种经验会让我说“通常 memory_limit 应该大于 upload_max_filesize
”;相反,php docs说:
generally speaking, memory_limit should be larger than
post_max_size
.
为什么?如果不是,会发生什么?
当我的 php 代码被执行时,我没有看到任何证据表明所有发布的文件都在内存中。在我看来,我所拥有的只是一个 $_FILES 数组,其中包含指向专门在磁盘上找到的文件的路径。 php 是否在我能够反省环境之前的某个时刻将整个帖子保存在内存中?我是否需要担心设置 post_max_filesize
>> memory_limit
?
旁白:
违反手册的规则不会导致服务器严重损坏(w/php5.3 apache2.2 debian 6)。
最佳答案
PHP 将接受单独小于 upload_max_filesize
且合起来小于 post_max_size
字节的上传文件。 PHP 文档在 memory_limit
方面是错误的,它不需要保留发布的文件内容。
以下配置适用于 Apache2 模块和 CGI,并接受小于 1G 的文件。
upload_max_filesize = 1G
post_max_size = 1G
memory_limit = 32M
关于php - php的memory_limit、upload_max_filesize和post_max_filesize的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5106871/