如何更改PHP中上传文件的最大大小:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么PHP不允许上传超过2MB的文件?

您是否曾尝试在网站上上传高质量的照片、演示文稿或视频,而PHP却冷冷地回复:“The uploaded file exceeds the upload_max_filesize directive in php.ini”?熟悉吗?这是一个经典问题,几乎在每个项目中都会遇到。在Stack Overflow上,关于“Change the maximum upload file size”的问题获得了数万次浏览——这绝非偶然。

在本文中,我们将详细解析PHP如何限制文件上传、在哪里进行配置以及如何正确增加限制。您不仅会了解到upload_max_filesize,还会了解到可能让所有努力付诸东流的潜在陷阱。



PHP如何限制文件上传?

当您通过表单提交文件时,PHP会在多个层面检查其大小。如果任何一个层面不通过——文件将无法上传。让我们解析需要更改的三个主要参数,以确保更改最大上传文件大小正常工作。



1. upload_max_filesize — 单个文件的直接限制

这是最明显的参数。它设置单个上传文件的最大大小。PHP默认值为2M(2兆字节)。要增加到例如100MB,需要写入:

upload_max_filesize = 100M


2. post_max_size — 整个POST请求的大小

很多人会在这里犯错。即使您增加了upload_max_filesize,但忘记了post_max_size,上传仍然无法工作。为什么?因为文件是在POST请求内部传输的,如果整个请求的大小超过限制——PHP会直接将其截断。

规则很简单:post_max_size必须大于upload_max_filesize。通常将其设置大20-30%。例如:

post_max_size = 120M


3. max_execution_time — 上传时间

大文件不会瞬间上传完成。如果文件大小为100MB,而网络速度较慢,脚本可能无法在规定时间内完成。默认情况下max_execution_time = 30秒。对于大文件,请增加到300-600秒:

max_execution_time = 600


4. memory_limit — 处理所需的内存

某些PHP脚本在处理前会将文件加载到内存中。如果memory_limit小于文件大小——您将收到错误。建议将其设置为大于post_max_size:

memory_limit = 256M


在哪里以及如何更改设置?

现在我们已经知道哪些参数负责更改最大上传文件大小,让我们解析在哪里更改它们。您有三种主要途径:



方法1:php.ini(主配置文件)

这是最可靠的方法。在服务器上找到php.ini文件(通常位于/etc/php/或/usr/local/etc/)。打开它并找到相关指令。如果没有,请在文件末尾添加:

; 允许文件上传(应为On)file_uploads = On

; 单个文件的最大大小upload_max_filesize = 100M

; POST请求的最大大小post_max_size = 120M

; 脚本执行时间max_execution_time = 600

; 内存限制memory_limit = 256M

更改后,务必重启Web服务器:

sudo service apache2 restart   # 对于Apachesudo service nginx restart     # 对于Nginx


方法2:.htaccess(仅适用于Apache)

如果您无法访问php.ini(例如在虚拟主机上),可以尝试通过网站根目录下的.htaccess文件:

php_value upload_max_filesize 100Mphp_value post_max_size 120Mphp_value max_execution_time 600php_value memory_limit 256M

重要提示:此方法仅在

博客

书籍推荐