现象

在前端页面或 FTP 客户端上传文件时,提示“文件大小超过限制”、“413 Request Entity Too Large”或“Maximum upload size exceeded”。小文件正常,仅大文件报错,且错误发生在文件传输开始或完成瞬间。

原因

Web 环境对上传大小有多层限制。PHP 层面有 upload_max_filesize 和 post_max_size;Nginx 层面有 client_max_body_size;IIS 层面有请求筛选(Request Filtering)和 ASP.NET 最大请求总大小配置。任何一层低于文件大小都会导致失败。

先自查(3 分钟)

确认报错具体来源。若为 PHP 错误,查看网站错误日志或 phpinfo() 输出;若为 Nginx 413,查看 Nginx 错误日志;若为 IIS,查看 IIS 日志或事件查看器。同时确认上传文件大小是否确实超过当前限制值,以及服务器磁盘剩余空间是否充足。

解决步骤

以下按系统环境分别说明。修改前建议备份原配置文件。

Linux 环境(Ubuntu/Debian/CentOS/Rocky):PHP 配置

找到当前 PHP 配置文件路径。若使用 PHP-FPM,通常在 /etc/php/ 目录下;若为 Apache 模块,可能在 /etc/php.d/ 或 /etc/httpd/conf.d/。以 Ubuntu 22.04 PHP 8.1-FPM 为例:

sudo nano /etc/php/8.1/fpm/php.ini

修改以下参数,单位通常为 M(兆字节),建议设为 100M 或更大:

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300

重启 PHP-FPM 服务使配置生效:

sudo systemctl restart php8.1-fpm

Linux 环境:Nginx 配置

编辑 Nginx 站点配置文件,通常在 /etc/nginx/sites-available/ 或 /etc/nginx/conf.d/ 下。找到对应网站的 server 块或 location 块:

sudo nano /etc/nginx/sites-available/default

在 server 块内添加或修改 client_max_body_size,单位 M:

client_max_body_size 100M;

测试 Nginx 配置语法并平滑重载:

sudo nginx -t
sudo systemctl reload nginx

Windows Server 环境:IIS 配置

打开 IIS 管理器,选中站点,在右侧“功能视图”中双击“请求筛选”(Request Filtering):

在“限制”选项卡中,勾选“允许大内容长度”,将“最大内容长度(字节)”设置为期望值,例如 104857600(100MB)。

若使用 ASP.NET,还需修改 web.config 文件。在 <system.web> 下添加或修改:

<httpRuntime maxRequestLength="102400" executionTimeout="300" />

注意:maxRequestLength 单位是 KB,102400 KB 等于 100MB。

重启 IIS 应用池使配置生效:

iisreset

验证

创建一个新的测试页面,使用 phpinfo() 查看 upload_max_filesize 和 post_max_size 是否已更新。尝试上传一个略小于新限制值的文件(如 90MB),观察是否成功。若仍失败,检查 Web 服务器日志获取具体错误信息。

预防

定期检查磁盘空间,避免因磁盘满导致上传中断。对于大文件上传,建议使用分片上传技术或专用传输工具,而非依赖浏览器直接上传。在应用代码中设置合理的超时时间,避免长连接被断开。记录每次修改的配置值,便于故障回溯。

在奇异互动如何最快处理

若为虚拟主机用户,登录会员中心进入“虚拟主机控制面板”,使用“PHP 版本切换”功能查看是否提供预设的上传限制选项,部分主机环境支持通过面板直接修改 PHP 参数。若需修改 Nginx 或 IIS 底层配置,虚拟主机通常不开放权限,需提交工单。提交工单时,请在“工单”页面关联具体虚拟主机产品,附上报错截图、文件大小、当前 PHP 版本及期望的最大上传值。若为云服务器用户,可直接通过“云服务器详情页”的“VNC 控制台”登录系统,按上述步骤手动修改配置文件并重启服务,无需提交工单。若修改后仍无法解决,再提交工单并附上错误日志片段。