首页 > Wordpress > 正文

WordPress 上传文件失败怎么办?限额与权限排查

fenij 2026-08-04 8 Wordpress

往媒体库拖一张 8MB 的图,进度条走到一半弹出「上传的文件超过 php.ini 中 upload_max_filesize 的限制」,或者干脆一句「无法写入文件到磁盘」。这两类报错的根子完全不同,一个是 PHP 限额,一个是目录权限。先分清楚是哪种,再动手。

先确认当前限额到底是多少

后台「工具 → 站点健康 → 信息 → 服务器」里能直接看到 upload_max_filesize、post_max_size、memory_limit 三个值。命令行更快:

php -i | grep -E "upload_max_filesize|post_max_size|max_execution_time|memory_limit"

有个坑:CLI 用的 php.ini 和 PHP-FPM 用的经常不是同一个文件,改错了白忙。以站点健康页面显示的为准,找路径用:

php --ini

改 php.ini:最彻底的办法

upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
max_execution_time = 300

这三个值有依赖关系:post_max_size 必须大于 upload_max_filesize,memory_limit 又要大于 post_max_size。否则大文件传到一半进程就被干掉了。改完重启 PHP-FPM:

systemctl restart php8.2-fpm

版本号按实际填,不确定就 systemctl list-units | grep php 看一眼。

没有主配置权限时的替代做法

共享主机改不了 php.ini。Apache 环境用根目录的 .htaccess:

php_value upload_max_filesize 64M
php_value post_max_size 128M

Nginx 下 .htaccess 不生效,改用站点根目录的 .user.ini:

upload_max_filesize = 64M
post_max_size = 128M

.user.ini 有缓存,默认 300 秒后才生效。改完立刻刷新说没变化的,多半是没等够。宝塔面板在「网站 → 设置 → 配置文件」和「软件商店 → PHP → 配置修改」里都有对应入口。

Nginx 那层还卡着一道 client_max_body_size

PHP 放开了,Nginx 没放开,浏览器会收到 413 Request Entity Too Large。在 server 段加一行:

client_max_body_size 128M;
nginx -t && systemctl reload nginx

报「无法写入文件到磁盘」是另一回事

这句话跟文件大小无关,多半是 uploads 目录权限或者磁盘满了。先看空间和 inode:

df -h
df -i

inode 耗尽的站点不少见,尤其是缓存插件生成了海量小文件。空间没问题就修权限,属主换成 Web 用户(Debian、Ubuntu 一般是 www-data,CentOS 常见 nginx 或 apache):

chown -R www-data:www-data /var/www/html/wp-content/uploads
find /var/www/html/wp-content/uploads -type d -exec chmod 755 {} \;
find /var/www/html/wp-content/uploads -type f -exec chmod 644 {} \;

还有一种比较隐蔽的:wp-config.php 里被写过 define(‘UPLOADS’, …) 指向了不存在的路径,搜一下确认。CentOS 开着 SELinux 的话,额外还要 chcon -R -t httpd_sys_rw_content_t 给 uploads 目录。

常见问题

问:改完为什么后台显示的最大上传值没变?
八成是改错了 php.ini,或者 PHP-FPM 没重启。用站点健康页面确认真实生效值,别只信命令行输出。

问:传大视频总是超时?
把 max_execution_time 和 Nginx 的 fastcgi_read_timeout 一起调到 300 秒。超过 100MB 的文件,建议直接 FTP 传进 uploads 目录,再用 Media from FTP 这类插件挂进媒体库。

问:把限额设成 0 是不是就不限制了?
恰好相反,upload_max_filesize 设 0 等于禁止上传。给一个够用的具体值就行。

照上面几步走完还是传不上去的话,把报错原文贴到 fenij.com 的评论区,我帮你看看卡在哪一层。