php - php的memory_limit、upload_max_filesize和post_max_filesize的关系

标签 php apache configuration file-upload

底线:
我是否需要担心设置 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/

相关文章:

php - Mysqli 多查询或更好的替代方案

php - 查询数据在MySQL本地显示,但在PHP中查询为空

php - 我需要制作 2 个 C++ 脚本来在两个不同的平台 Windows Mobile 和 PHP 服务器上压缩和解压缩字符串

java - 如何访问 WEB-INF 文件夹外的 jdbc 属性文件(用于 Spring Security 配置)?

c# - 如何从 appsettings.json 文件中的对象数组读取值

php - 使用 DOM PHP 解析跨度类文本

php - 在 PHP 中将粗俗的分数转换为数字

apache - 有没有人在 OSX 上安装了 Tomcat 客户端

php隐藏所有错误

java - Maven Artifact 无法解析;尝试从错误的存储库解析 Artifact