本文约 2,769 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
安装大体积主题、上传高清图片或导入插件包时,很多站长都会撞上「上传的文件尺寸超过 upload_max_filesize 设定的最大值」这类提示,或者媒体库上传到一半失败、进度条卡住不动。WordPress 默认的上传上限往往只有 2M 到 8M,而现在的主题包、视频素材动辄几十兆,自然就传不上去。这个限制其实不在 WordPress 本身,而是由服务器端 PHP 的配置决定的,WordPress 只是被动地把服务器的值显示出来。只要把 PHP 的上传相关参数调大,再同步处理反向代理和 Nginx 的限制,问题就能解决。下面给出三种常用改法,并说明各自的适用场景和优先级,帮你不走弯路。
故障原因分析
upload_max_filesize太小。这是单个文件允许上传的最大体积,PHP 默认常见为 2M,是整个限制链最直接的一环。post_max_size小于上传限制。POST 请求体整体最大体积,如果它比 upload_max_filesize 还小,上传还是会失败,而且报错往往更含糊。memory_limit不足。处理大文件、生成多张缩略图时会占用大量内存,内存爆掉上传同样中断。- Nginx 的
client_max_body_size限制。即使 PHP 放宽了,Nginx 在更外层就把请求拦下,表现为 413 错误,很多站长只改 PHP 却始终无效就是这个原因。 - 服务器的 php.ini 被主机商统一管理,站点目录下的 .htaccess 修改不生效,必须走面板或联系客服。
- WordPress 自身的
upload_size_limit上限提示没同步,界面上仍显示旧数值,让人误以为没改成功。
分步解决方案
准备:先查清当前限制到底是多少。 在后台「媒体 → 添加新媒体」页面底部,通常会显示「最大上传文件大小:xx MB」。也可以新建一个 info.php 里面写 <?php phpinfo(); ?> 放到站点目录,浏览器访问后搜索 upload_max_filesize 和 post_max_size,看清服务器实际值,再对症下药。查清楚再动手,能避免改了不该改的地方、或反复怀疑设置没生效。
方法一:修改 php.ini(最彻底)。 如果服务器允许你编辑 php.ini(宝塔面板在「软件商店 → PHP → 设置 → 配置修改」即可),找到并调整以下几项:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
改完保存并重启 PHP(宝塔里点「重启」)。若不知道 php.ini 位置,可用上面的 phpinfo 方法查看「Loaded Configuration File」路径。这是最根本的做法,推荐优先使用。
方法二:修改 .htaccess(Apache 环境,无需重启 PHP)。 在网站根目录的 .htaccess 文件顶部加入:
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value memory_limit 256M
php_value max_execution_time 300
此方法在 PHP 以 Apache 模块方式运行时有效;若 PHP 以 FastCGI/PHP-FPM 运行,会直接报 500 错误,此时请改用方法一。
方法三:在 functions.php 中调整(代码注入,适合无服务器权限)。 编辑当前主题的 functions.php,加入:
@ini_set('upload_max_size', '64M');
@ini_set('post_max_size', '64M');
@ini_set('memory_limit', '256M');
add_filter('upload_size_limit', function () {
return 64 * 1024 * 1024; // 64M
});
要特别注意:upload_size_limit 这个过滤器只改变 WordPress 后台显示和允许的上限提示,它无法突破服务器 PHP 真正设定的物理限制。也就是说,如果 php.ini 里卡死在 8M,过滤器和 ini_set 大多也是无能为力的,所以这只是辅助手段。
附加:Nginx 用户别忘了同步调整。 如果站点用 Nginx 或宝塔的 Nginx 环境,需要在站点配置中放开请求体大小:
client_max_body_size 64M;
宝塔路径为「网站 → 设置 → 配置文件」,找到 server 段加入后重载 Nginx。此外,如果前面挂了 CDN 或 WAF,也要到它们的控制台里把上传体积上限一并调大。很多站长按 PHP 改完还是失败,最后一查才发现卡在 Nginx 或 CDN 这一层——这类外围限制不会在 WordPress 后台体现,只能到服务器和 CDN 面板里核对,所以改完一定要实际传个大文件测试一下。
常见踩坑点
- 只调大
upload_max_filesize却没调post_max_size,结果还是传不上去。 - 在 Nginx 环境里写
php_value到 .htaccess,直接触发 500 错误。 - 以为 functions.php 的过滤器能突破服务器限制,改完发现毫无变化。
- 忘记重启 PHP-FPM,改完 php.ini 以为立即生效。
- 上传限制调得过大,导致小内存服务器被拖垮,应量力而行。
- 用 CDN 或 WAF 时,请求体还会被它们拦截,需要到 CDN 后台一并放宽。
- 改完不清理缓存,界面仍显示旧的上限数值。
总结
调大 WordPress 上传文件大小限制的关键,是分清到底卡在哪一层:PHP 的 upload_max_filesize 与 post_max_size、服务器的 memory_limit、以及 Nginx 的 client_max_body_size。最靠谱的顺序是先改 php.ini 并重启 PHP,再根据环境决定是否用 .htaccess,最后才考虑 functions.php 里的过滤器补漏,同时别忘了 Nginx 和 CDN 这两道外围关卡。把 WordPress 上传文件大小限制一次性调到合适值(一般 32M 到 64M 足够),网站后续上传主题、图片都会顺畅很多,也能避免因为体积限制被迫手动拆分或压缩文件。改完务必实际传一个接近上限的文件验证,确认整条链路都放开了。
