如何提高 WordPress 上传限制(适用于任何主机)
先查看当前的 WordPress 上传限制,再在适合你主机的位置提高它:php.ini、.user.ini、.htaccess、cPanel、Nginx 或 Cloudflare。
要提高 WordPress 的上传限制,就要在你的主机真正读取的配置文件中调高两个 PHP 设置:upload_max_filesize 和 post_max_size。在你自己管理的服务器上是 php.ini;在大多数运行 PHP-FPM 或 FastCGI 的共享主机上是 .user.ini;只有 Apache 以模块方式运行 PHP 时才是 .htaccess;cPanel 则用 MultiPHP INI Editor。如果服务器运行 Nginx,还要调高 client_max_body_size。修改 wp-config.php 不会改变上传限制。
WordPress 最大上传大小工具可以把一个目标大小转换成 php.ini(或 .user.ini)、.htaccess 和 wp-config.php 中相互匹配的数值,直接粘贴即可,不用手动输入。
第 1 步:查看当前的上传限制
动手修改之前,先弄清楚现在的限制是多少,以及是哪个设置决定的。
- 媒体 > 添加新文件。 上传页面会显示最大上传文件大小,这就是你要提高的数字。
- 工具 > 站点健康 > 信息。 展开“媒体处理”。站点健康文档列出了那里显示的内容:允许的 POST 数据最大大小、上传文件的最大大小,以及两者中较小的那个,即最大有效文件大小。“服务器”部分会显示更多 PHP 数值。


WordPress 在 wp_max_upload_size() 中计算上传限制,它从 PHP 读取 upload_max_filesize 和 post_max_size,并取较小的一个。如果一个是 64M、另一个是 8M,你的限制就是 8M。
第 2 步:了解哪些设置起作用
| 设置 | 限制的内容 | PHP 默认值 | 可以在哪里修改 |
|---|---|---|---|
upload_max_filesize | 单个上传文件的最大大小 | 2M | php.ini、.user.ini、.htaccess、httpd.conf |
post_max_size | 整个 POST 请求,包括文件 | 8M | php.ini、.user.ini、.htaccess、httpd.conf |
memory_limit | PHP 运行时可用的内存 | 128M | 任何地方,包括 wp-config.php |
max_execution_time | 脚本可运行的秒数 | 30 | 任何地方,包括 wp-config.php |
client_max_body_size(Nginx) | Nginx 接受的请求体大小 | 1m | 仅 Nginx 配置 |
PHP 默认值和修改模式来自 php.ini 指令列表;Nginx 默认值来自 Nginx 核心模块文档。大多数主机设置的值都高于 PHP 默认值,所以要在站点健康中查看你的真实数字。
upload_max_filesize 和 post_max_size 是 PHP 所说的 INI_PERDIR 设置:它们“可以在 php.ini、.htaccess、httpd.conf 或 .user.ini 中设置”,别的地方都不行。memory_limit 不限制文件大小,但 WordPress 需要内存来为大图生成缩放副本,所以大文件上传成功后,仍可能因内存耗尽错误而失败。
第 3 步:在适合你主机的位置提高限制
| 你的环境 | 在哪里设置 | 说明 |
|---|---|---|
| VPS 或独立服务器 | PHP 实际加载的 php.ini | 之后重启 PHP-FPM 或 Apache |
| 使用 PHP-FPM 或 FastCGI 的共享主机 | WordPress 根目录中的 .user.ini | 最多可能需要 5 分钟才生效 |
| 以模块方式运行 PHP 的 Apache(mod_php) | 使用 php_value 的 .htaccess | 在 PHP-FPM 或 FastCGI 下会导致 500 错误 |
| cPanel 主机 | Software > MultiPHP INI Editor | 自动帮你写入 php.ini、.user.ini 或 .htaccess |
| PHP 前面有 Nginx | 除 PHP 数值外还要设置 client_max_body_size | 否则 Nginx 返回 413 |
| 托管型 WordPress 主机 | 主机控制面板或客服 | 很多主机在平台层面限制上传 |
| 网站在 Cloudflare 后面 | Cloudflare 自己的上传限制 | Free 和 Pro 套餐为 100 MB |
php.ini(你自己管理的服务器)
先找到被加载的文件。新建一个临时文件,内容为 <?php phpinfo();,在浏览器中打开,查看“Loaded Configuration File”那一行,然后删除这个文件。编辑那个 php.ini:
upload_max_filesize = 128M
post_max_size = 130M
max_execution_time = 300
然后重启 PHP,让它读取修改。使用 PHP-FPM 时,服务名里带有版本号,例如在 Debian 或 Ubuntu 上运行 sudo systemctl restart php8.3-fpm。使用 mod_php 时,重启 Apache。
.user.ini(大多数共享主机)
PHP 只有以 CGI 或 FastCGI(包括 PHP-FPM)方式运行时才会读取 .user.ini 文件。在 wp-config.php 所在的文件夹中创建或编辑 .user.ini:
upload_max_filesize = 128M
post_max_size = 130M
PHP 每隔 user_ini.cache_ttl 秒重新读取这些文件,默认是 300 秒。认定无效之前先等五分钟,能重启 PHP-FPM 的话也可以直接重启。
.htaccess(仅限使用 mod_php 的 Apache)
php_value upload_max_filesize 128M
php_value post_max_size 130M
PHP 手册说明这些指令适用于以 Apache 模块方式运行的 PHP。如果保存后网站立刻出现 500 Internal Server Error,说明 PHP 是以 FastCGI 或 PHP-FPM 方式运行的。删掉这几行,改用 .user.ini。
cPanel MultiPHP INI Editor
在 cPanel 中打开 Software > MultiPHP INI Editor,选择你的域名,在 Basic Mode 中修改数值。根据 cPanel 文档,Basic Mode 会把设置保存到支持该设置的 php.ini、.user.ini 和 .htaccess 文件中,所以你不需要知道服务器用的是哪一个。
Nginx
Nginx 会在 PHP 看到请求之前检查请求大小。当请求大于 client_max_body_size 时,Nginx 返回 413 Request Entity Too Large。默认值是 1m。在 server 块中加入一个至少与 post_max_size 一样大的值:
client_max_body_size 130M;
用 sudo nginx -t && sudo systemctl reload nginx 测试并重新加载。在 Apache 上,类似的设置是 LimitRequestBody,在常规 WordPress 主机上很少需要修改。
托管主机和 Cloudflare
有些托管型 WordPress 主机会忽略你的 php.ini 或 .user.ini,在整个平台层面设置限制。如果修改后站点健康仍显示旧数字,请询问主机上限是多少、能否提高。
如果网站经过 Cloudflare,Cloudflare 也有自己的限制。它的缓存文档列出的最大上传大小为:Free 和 Pro 套餐 100 MB,Business 套餐 200 MB,Enterprise 套餐最高 5 GB。任何 PHP 设置都无法突破这个限制。
为什么 wp-config.php 不起作用
很多文章建议在 wp-config.php 中加入:
@ini_set( 'upload_max_filesize', '128M' );
@ini_set( 'post_max_size', '130M' );
这两个设置都是 INI_PERDIR,而 PHP 文档说明这种模式的设置不能用 ini_set() 设置。@ 会隐藏失败,所以这几行看起来无害,实际上什么也没改变。wp-config.php 能改的是内存,因为 memory_limit 在任何地方都可以设置:
define( 'WP_MEMORY_LIMIT', '256M' );
当大图在处理过程中失败时,这会有帮助。但它不会改变最大上传文件大小。
第 4 步:确认修改已生效
重新加载“媒体 > 添加新文件”,检查最大上传文件大小是否显示为新的数值。如果没有:
- 检查
post_max_size是否至少与upload_max_filesize一样大。WordPress 取较小的那个。 - 确认你编辑的是 PHP 实际加载的文件。放错文件夹的
php.ini会被忽略。 - 修改
.user.ini后等五分钟,或重启 PHP-FPM。 - 如果 WordPress 中的数字变了,但上传仍以 413 失败,阻拦来自 Nginx、主机的代理或 Cloudflare。
- 如果文件已到达 WordPress 后才以“HTTP error”失败,问题就不在大小了。我们关于 WordPress 上传图片时出现 HTTP 错误的指南介绍了常见原因。
应该设置多高?
按你实际需要上传的最大文件来设置,留一点余量,并让 post_max_size 略高于 upload_max_filesize。大文件上传耗时也更长,所以如果大文件在慢速网络下超时,请提高 max_execution_time。对于长视频或备份压缩包这类特别大的文件,通过 SFTP 或分块上传插件上传通常比一次超大的浏览器上传更可靠,而且 Cloudflare 套餐的限制可能本来就让浏览器上传行不通。
确定目标后,最大上传大小工具会帮你写好相互匹配的 PHP 代码行。如果你的服务器运行 Nginx,请自行加上本指南中的 Nginx 那一行。
FAQ
常见问题
如何查看 WordPress 当前的上传限制?
进入“媒体 > 添加新文件”。上传页面会显示最大上传文件大小。想看背后的细节,打开“工具 > 站点健康 > 信息”并展开“媒体处理”,那里列出了上传文件的最大大小、POST 数据的最大大小,以及两者中较小的那个,即最大有效文件大小。
为什么 WordPress 提示上传的文件超过了 php.ini 中的 upload_max_filesize 指令?
文件大于 PHP 的 upload_max_filesize 设置。这个限制不是 WordPress 设定的,而是从 PHP 读取的。请在 php.ini、.user.ini 中,或在使用 mod_php 的 Apache 上通过 .htaccess,同时提高 upload_max_filesize 和 post_max_size。PHP 自带的 upload_max_filesize 默认值只有 2M,不过大多数主机都设得更高。
可以在 wp-config.php 里提高上传限制吗?
不可以。upload_max_filesize 和 post_max_size 属于 PHP_INI_PERDIR 设置,PHP 只接受来自 php.ini、.htaccess、httpd.conf 或 .user.ini 的值。wp-config.php 中的 ini_set() 语句运行时不报错,但什么也不会改变。wp-config.php 可以提高 WordPress 的内存限制,但限制文件大小的并不是内存。
提高 PHP 限制后为什么还会出现 413 Request Entity Too Large?
PHP 前面的某个环节拒绝了请求。在 Nginx 上是 client_max_body_size,默认值为 1m,超过时返回 413 错误。在 server 块中提高它并重新加载 Nginx。如果网站经过 Cloudflare,其套餐的上传大小限制也可能在请求到达服务器之前就将其拦下。
post_max_size 需要比 upload_max_filesize 大吗?
至少要一样大,稍大一点更稳妥。文件是和其他表单数据一起放在一个 POST 请求里发送的,所以整个请求都计入 post_max_size。WordPress 取两者中较小的值作为上传限制,因此只提高 upload_max_filesize,限制不会有任何变化。