即使'post_max_size'和'upload_max_filesize'设置为4096M,Apache下也无法在PHP中上传大于1GB的文件

Eri*_*c F 3 apache-http-server php

据我了解,当使用 Apache 和 PGP 托管网络服务器时php.ini,决定最大上传大小的三个设置是:

  1. memory_limit
  2. post_max_size
  3. upload_max_filesize

正如我所读到的,memory_limit必须大于post_max_size并且post_max_size必须大于upload_max_filesize。从那里开始,upload_max_filesize在 Apache 设置中,最低的实际上是上传大小的真正限制。

那么,如果上述情况属实,那么是否可以通过与 Apache 一起运行的 PHP 上传到网络服务器的真正最大文件大小等于托管设备上的物理内存?除了磁盘写入限制,即 NTFS 如何将文件大小限制为每个文件 4GB?

我问这个的原因是我的post_max_size并且upload_max_filesize设置为 4096M 但是虽然文件略小于 1GB 上传没有问题但超过 1GB 的文件没有。那么memory_limit在这样的事情中会是一个促成因素吗?

Gia*_*968 5

你问:

那么,如果上述情况属实,那么是否可以通过与 Apache 一起运行的 PHP 上传到网络服务器的真正最大文件大小等于托管设备上的物理内存?

不。您正确地解释了有关memory_limit这方面的错误建议,这会让您认为实际情况memory_limit与文件上传大小几乎没有关系。memory_limit纯粹是关于 PHP 进程内存,与文件传输进程无关。

这就是为什么……

使用 PHP 和 Apache 上传文件时唯一需要关注的两个项目是:

  • post_max_size:设置允许的帖子数据的最大大小。此设置也会影响文件上传。要上传大文件,此值必须大于upload_max_filesize。一般来说,memory_limit应该大于post_max_size
  • upload_max_filesize: 上传文件的最大大小。

memory_limit在这种设置中与文件传输完全无关。所有memory_limit做的是控制每个PHP的过程多少内存获取如果是内部处理的东西。我的文件传输与memory_limit.

  • memory_limit:这设置了允许脚本分配的最大内存量(以字节为单位)。这有助于防止编写不当的脚本来耗尽服务器上的所有可用内存。请注意,要没有内存限制,请将此指令设置为 -1。

也就是说,PHP 手册(如上所述)说:

一般来说,memory_limit应该大于post_max_size

这是没有意义的,如果你仔细想想,就会被认为是一个错误。memory_limit是对 RAM 中 PHP 进程可以处理多少数据的限制。但是——正如我之前所说的——文件传输是一个流数据过程,PHP 在 RAM 中存储文件内容的时间不会超过将其写入文件系统之前所需的时间。

这个 Stack Overflow 的回答说明了很多。而这个对方的回答解释了它更雄辩和简洁:

仅当您计划将整个文件读入内存并且您读入的文件大于您分配给 PHP 的空间时(即memory_limit),在这种情况下您将耗尽内存。