关于上传限制

发布于 2021-10-02  416 次阅读


文章目录[隐藏]

上传限制

上传限制主要来源于:PHP、Nginx(或 Apache)的配置、内存限制等,如果上传时报 500,代码又没有错的情况下,通常就是大小限制的问题了。

记得修改配置要重启对应软件~
PHP
打开 php.ini。Centos 默认路径为 /etc/php.ini。

upload_max_filesize:上传的文件的最大限制,默认 2M。
memory_limit:一个脚本所能够申请到的最大内存字节数,默认值 8M。如果不需要任何内存上的限制,必须将其设为 -1。这个配置会影响系统的性能,一般设置为系统总内存的四分之一。
post_max_size:POST 数据所允许的最大限制,这个值必须大于等于 upload_max_filesize,因为发送 POST 请求时除了文件还会带别的数据。
max_execution_time:超时时间,默认 30 秒,即如果文件太大,上传时间超过 30 秒,PHP 脚本会主动断掉,可以设置为 0,让脚本永远不过时,但可能还是会挂掉,这就是另一个话题了:如何上传大文件。
max_input_time:以秒为单位对通过 POST、GET 以及 PUT 方式接收数据时间进行限制。
主要是前三个,毕竟 2M 对于现在的文件需求来说实在太小了。

Nginx
Centos 下路径一般为 /etc/nginx/conf.d。

client_max_body_size:在 http{ ... } 之间加入 client_max_body_size 35m 来修改上传限制,默认是 8M。
Apache
Apache 主要出现在虚拟主机或者本地测试,Centos 上路径不晓得 :)。

在 httpd.conf 中找到如下配置:

FcgidMaxRequestLen:Apache 使用 fcgid 模块时对上传文件的限制,1M 写成 1048576(即:1024 * 1024)。

多少才是合适的?

世界上所有的事情都有个度,如果妄想设置了 PHP 不超时,就不会超时,那是不可能的,凡事都要按照实际情况来看,需要考虑的点有:

服务器内存。对于 PHP 来说,上传一个文件相当于把整个文件加载到内存里,如果服务器内存只有 1G,那配置多少都是不可能上传 1G 的文件的,何况 1G 内存不可能只用来上传。
由于内存限制,对于大文件就不可能通过配置来解决上传问题,这就必须考虑“分段上传”的技术(但这不是现在讨论的点)。一般来说,如果需要测试代码或者对文件大小要求不高,那设置个一两百兆还是可以接受的。

擦肩而过的概率