问题概述
当通过 PHP 应用(如 WordPress)上传文件时,若遇到“413 Request Entity Too Large”错误,通常是由于服务器端对请求体大小的限制造成的。此错误表明上传的文件或表单数据总大小超过了服务器配置的允许值。主要涉及 PHP 和 Web 服务器(如 Nginx)两方面的配置。
解决方案
1. 调整 PHP 配置
PHP 默认限制了上传文件的大小和 POST 数据总量。你需要修改 PHP 配置文件(通常是 php.ini)中的以下两个参数:
- upload_max_filesize:允许上传的单个文件的最大尺寸。例如:
upload_max_filesize = 100M - post_max_size:允许通过 POST 方法提交的表单数据总大小的最大值。例如:
post_max_size = 101M
重要关系:必须确保 post_max_size 的值 大于或等于 upload_max_filesize 的值。因为整个上传请求(包含文件和其他表单数据)的大小受 post_max_size 限制。
修改后,需要重启 PHP 处理服务(如 PHP-FPM)以使配置生效。
# 例如重启 PHP-FPM 服务(具体命令可能因系统而异)
sudo systemctl restart php-fpm.service
2. 调整 Web 服务器配置(以 Nginx 为例)
Nginx 作为 Web 服务器,也有一个独立的客户端请求体大小限制。即使 PHP 配置正确,如果 Nginx 的限制更小,请求也会被 Nginx 提前拒绝并返回 413 错误。
在 Nginx 的配置文件(如 /etc/nginx/nginx.conf 或在站点配置文件的 http、server 或 location 块中)添加或修改以下指令:
client_max_body_size 100m;
此处的值(例如 100m)应至少设置为你预期的最大文件上传大小。建议略大于 PHP 的 post_max_size 值。
修改后,需要测试配置并重启 Nginx:
sudo nginx -t # 测试配置文件语法
sudo systemctl restart nginx # 重启 Nginx 服务
3. 针对 WordPress 的额外检查
如果你在 WordPress 中遇到此问题,除了上述服务器配置,还可以检查:
- WordPress 内存限制:确保
wp-config.php文件中的WP_MEMORY_LIMIT设置足够大(例如define('WP_MEMORY_LIMIT', '256M');)。 - .htaccess 文件(仅适用于 Apache):如果使用 Apache 服务器,可能还需要在网站根目录的
.htaccess文件中添加类似php_value upload_max_filesize 100M的指令(前提是 Apache 配置允许覆盖)。
配置生效与验证
- 完成所有配置修改并重启相应服务后,建议创建一个简单的 PHP 信息页面(
phpinfo();)来确认upload_max_filesize和post_max_size的新值已生效。 - 使用一个小于新限制的文件进行上传测试。
- 如果问题依旧,请检查 Web 服务器(Nginx/Apache)的错误日志,以获取更详细的错误信息。
通过系统性地调整 PHP 和 Web 服务器的相关参数,即可解决“413 Request Entity Too Large”错误,成功上传大文件。