网站已运行 162 · 23小时 · 13 · 54
目录

WordPress 上传文件大小限制怎么改?upload_max_filesize 与 post_max_size 排查

文件依次通过两层上传限制后到达服务器的机制示意图

WordPress 上传文件大小限制看起来只是一个数字,实际却可能同时受 PHP、WordPress、Web 服务器或代理层影响。后台提示“最大上传文件大小:100 MB”,并不代表把任意小于 100 MB 的主题、插件、图片或备份文件传上去都一定成功。

更稳妥的处理顺序是:先确认失败发生在哪一层,再修改对应配置,最后用同一入口复测。本文用本站当前线上环境的只读结果做基线,把 upload_max_filesizepost_max_size 和 WordPress 最终显示值之间的关系讲清楚。

WordPress 上传文件大小限制不是只看一个参数

WordPress 核心的 wp_max_upload_size() 会先比较 PHP 的 upload_max_filesizepost_max_size,取其中较小的值,然后再经过 upload_size_limit 过滤器。也就是说,单独把其中一个参数调大,最终限制可能完全不变。

限制层控制什么常见表现
upload_max_filesize单个上传文件的 PHP 上限超过后提示文件大于允许值
post_max_size整个 POST 请求体的 PHP 上限文件没超过前一项,提交仍失败
WordPress 最终值两项较小值再经过过滤器媒体上传页显示的“最大上传文件大小”
Web 服务器、反向代理或安全层请求到达 PHP 之前的体积与规则常见为 413,WordPress 可能来不及记录错误
临时目录、磁盘与权限上传过程中的临时写入和最终落盘卡住、临时文件错误或无法移动文件
实际可上传大小由多层共同决定,排查时应从错误发生的位置反推限制层。

PHP 官方文档还明确说明,post_max_size 应大于 upload_max_filesize。因为请求体不只有文件本身,还可能包含表单字段和编码开销。若两者都设置成完全相同的值,接近上限的文件仍可能失败。

本站实测:后台显示的 100 MB 是怎么来的

截至 2026 年 9 月,本站线上环境为 WordPress 7.1、PHP 8.4.10。通过 WP-CLI 只读检查得到:

wp eval 'printf(
    "WordPress: %s\nupload_max_filesize: %s\npost_max_size: %s\n",
    size_format( wp_max_upload_size() ),
    ini_get( "upload_max_filesize" ),
    ini_get( "post_max_size" )
);'
WordPress: 100 MB
upload_max_filesize: 100M
post_max_size: 100M

这个结果说明当前有效上限是 100 MB,但它也暴露出一个小问题:post_max_size 没有给请求体额外余量。本站目前没有靠近上限的大文件上传需求,所以不为了一个“更好看”的数字冒然修改生产配置;真要长期上传接近 100 MB 的文件,再把请求体上限适当调高更合理。

注意:WP-CLI 与网站请求不一定使用同一套 PHP 运行环境。命令行结果只能作为基线,还要到“媒体 → 添加媒体文件”核对页面显示值,必要时再通过“工具 → 站点健康 → 信息 → 服务器”确认 Web 环境。两处结果不一致时,以实际上传入口所用的 PHP-FPM 或主机面板配置为准。

先看报错发生在上传的哪一步

同样是“上传失败”,修复方向可能完全不同。先记录文件大小、上传入口、HTTP 状态和完整错误文字,再对照下面的判断表:

现象优先怀疑第一步
选择文件后立即提示超过大小WordPress 或 PHP 上限核对媒体上传页与 wp_max_upload_size()
请求返回 413Web 服务器、代理或安全网关查响应头和服务器日志,不要只改 PHP
后台显示的上限没变化改错 PHP 配置文件或服务未重载比较 CLI 与 Web 环境,核对生效配置
上传一段时间后超时执行时间、网络、代理或资源不足查请求耗时、PHP 与服务器错误日志
提示缺少临时文件或无法移动临时目录、磁盘空间或权限查磁盘、临时目录及 uploads 权限
只有某种扩展名失败文件类型或安全策略核对允许的 MIME 类型和安全插件日志

如果是在特定主机面板里安装插件时失败,还要结合主机自身限制。本站之前记录过一篇阿里云虚拟主机安装 WordPress 插件上传失败排查,那类环境不能照搬 VPS 的配置方式。

怎样只读检查当前有效限制

1. 先看 WordPress 实际显示值

进入“媒体 → 添加媒体文件”,上传区域下方会显示当前最大上传文件大小。这是最接近普通后台上传场景的结果,也是初步沟通时最容易核对的一项。

2. 有 SSH 时再比较 PHP 参数

WP-CLI 可以一次输出 WordPress 计算结果和两个 PHP 参数:

wp eval 'echo "WP=" . size_format( wp_max_upload_size() ) . PHP_EOL;
echo "upload=" . ini_get( "upload_max_filesize" ) . PHP_EOL;
echo "post=" . ini_get( "post_max_size" ) . PHP_EOL;'

若命令行输出与后台不同,不要马上下结论。先确认 CLI 和网站分别读取哪个 php.ini,以及网站是否由不同版本的 PHP-FPM 处理。

3. 用一个略超上限的小测试文件复现

测试文件只需略高于当前限制,不需要准备几百 MB 的大文件。先确认它不含真实客户数据,再从与故障相同的入口上传,并记录浏览器网络面板中的状态码。测试完成后删除无用文件,避免媒体库和备份被测试数据占满。

WordPress 上传文件大小限制怎么安全修改

优先使用主机控制面板提供的 PHP 设置,因为它通常知道当前站点实际使用的 PHP 版本和处理方式。面板没有入口时,再根据主机文档选择 php.ini.user.ini 或站点级 PHP-FPM 配置。不要把网上的一段 .htaccess 代码当成所有服务器都通用的答案。

下面只是一个关系示例,不是建议所有网站都设置成这个数值:

upload_max_filesize = 64M
post_max_size = 72M

这里给 post_max_size 留出了请求体余量。修改后还要确认配置是否需要重载 PHP-FPM,并重新检查后台显示值。若前端代理先拒绝请求,还需按主机或代理服务的官方文档调整请求体限制;只改 PHP 不会生效。

也不建议为了偶尔上传一次大型插件,就把生产站上限长期设成几 GB。较大的上传入口会增加超时、磁盘占用和异常请求的处理成本。插件或主题包过大时,可以先检查压缩包是否套了多层目录,或使用 SFTP、主机文件管理器等受控方式部署。

把限制调大后仍失败,继续查这 5 项

  1. 413 是否在 PHP 之前产生:看响应头、代理和 Web 服务器日志。
  2. Web 与 CLI 是否读取同一配置:PHP 版本、SAPI 和配置文件路径可能不同。
  3. 临时目录与磁盘是否可写:上传会先占用临时空间,最终还要写入 wp-content/uploads
  4. 处理图片时是否耗尽内存:原图解码需要的内存可能远大于压缩文件体积,可结合WordPress 内存不足排查继续确认。
  5. 文件类型与安全规则是否拦截:只失败某种扩展名时,不要继续盲目加大体积限制。

修改后的验证清单

  • 后台媒体上传页显示的新上限与预期一致。
  • 小文件、接近目标上限的测试文件都能正常上传。
  • 略超上限的文件会被明确拒绝,而不是长时间卡住。
  • 插件、主题或媒体从实际使用入口复测成功。
  • PHP、Web 服务器和代理日志没有新增 413、超时或磁盘错误。
  • 测试媒体已清理,缓存只做与本次页面相关的定向处理。

总结

处理 WordPress 上传文件大小限制,关键不是把数字尽量调大,而是找出真正生效的最小限制层。先看后台显示值和报错时机,再比较 upload_max_filesizepost_max_size 与 WordPress 计算结果;遇到 413、超时或临时文件错误时,继续查 Web 服务器、代理、磁盘与权限。这样修改范围更小,也更容易验证和回滚。

参考资料:WordPress Developer Resources《wp_max_upload_size()》WordPress.org《Media Add New Screen》PHP Manual《Description of core php.ini directives》(访问日期:2026 年 9 月 1 日)。

数臻源码猫咪图标
目录
数臻源码猫咪图标

目录

标签云: