本文约 2,362 字,预计阅读 6 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
在媒体库里上传图片,进度条走到一半突然弹出「上传时发生了错误,请稍后再试」,或者提示「无法建立目录 wp-content/uploads/2026/10」,图片怎么也传不上去。这类故障在搬家、换主机、升级 PHP 版本之后尤其常见,也很容易让人误以为是图片本身有问题,于是换格式、换浏览器反复折腾,结果一点用没有。其实 WordPress 上传图片这件事,要同时经过目录写入权限、PHP 内存与上传限制、图片处理库、服务器安全模块好几道关,任何一道卡住都会失败。下面按从外到内、从常见到少见的顺序,帮你一步步排查并解决,照着做基本都能找到症结。排查时最好记住一个原则:先看目录权限,再看内存和上传限制,最后才怀疑代码和插件,顺序对了能少走很多弯路。
故障原因分析
- uploads 目录权限不足或不存在。WordPress 需要往
wp-content/uploads写文件,权限不够或属主不对就会报「无法建立目录」,这是最常见的原因。 - 内存或上传大小限制过低。大图生成多张缩略图时内存爆掉,上传中途失败,页面往往只给一句模糊的报错。
- PHP 的 GD 或 Imagick 扩展缺失。WordPress 处理图片缩放依赖这两个库,缺了就无法生成缩略图,上传到一半中断。
- 服务器安全模块拦截。mod_security、WAF 或安全插件把上传请求当成攻击拦下,特征是换小图能传、稍大就被阻断。
- 磁盘空间满了。主机磁盘写满,任何写入都会失败,表现和权限问题很像,很容易被忽略。
- 文件属主与 PHP 运行用户不一致。上传后文件能建但读不了,或反过来。
分步解决方案
方法一:修复 uploads 目录权限(最常见)。 用 FTP 或 SSH 检查 wp-content/uploads 目录。若不存在就先新建一个,然后赋予正确权限和属主。SSH 下执行(把 www 换成你服务器实际的运行用户,如 nginx、apache、www-data):
mkdir -p wp-content/uploads
chown -R www:www wp-content/uploads
chmod -R 755 wp-content/uploads
目录 755、文件 644 是通用安全值。宝塔面板用户可在文件管理里右键目录 → 权限,设为 755 并勾选「应用到子目录」。文件夹不存在时 WordPress 一般会自动创建,但若上层目录不可写就建不出来。
方法二:提高内存与上传限制。 在 wp-config.php 中,/ That's all, stop editing! / 之前加入:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
再配合 php.ini 调大上传与执行时间:
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
改完重启 PHP 生效。如果重启后后台显示的上限没变,说明你改的这份 php.ini 不是当前 PHP 实际加载的那份,需要用 phpinfo 重新确认路径。
方法三:检查并启用图片处理库。 在宝塔「PHP → 安装扩展」里确认 GD 或 Imagick 已安装。若图片本身分辨率极大导致处理失败,可在 functions.php 临时关闭自动生成的大尺寸图:
add_filter('big_image_size_threshold', '__return_false');
方法四:排除安全模块与插件干扰。 先临时停用所有安全类插件再上传测试。若是 mod_security 拦截,可在站点 .htaccess 顶部临时写入(仅用于测试):
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
若确认是它导致,应联系主机商在服务器层放行图片上传,而不是长期关闭,避免留下安全缺口。
方法五:绕过媒体库直接上传。 实在搞不定后台时,可以用 FTP 把图片直接传到 wp-content/uploads/年份/月份/ 目录,再用「媒体库 → 添加 → 从服务器选择」找到它,或者装一个「Add From Server」类插件导入,先让内容能正常发布。
方法六:检查磁盘空间。 用面板或 SSH 查看磁盘占用,确认不是空间写满导致的写入失败,这种情况先清理日志或扩容,再谈其他设置。
常见踩坑点
- 只改了 uploads 目录权限,没改上层 wp-content 目录,结果仍无法创建新文件夹。
- 用 777 权限图省事,留下严重安全隐患,应该用 755 加正确属主。
- 改了 php.ini 忘记重启 PHP,误以为没效果。
- 忽略磁盘空间,怎么改权限都不好使。
- 长期关闭 mod_security 来「解决」问题,给站点带来风险。
- 上传超大原图导致处理失败,却一直以为是服务器故障,应先压缩图片再传。
- 属主和 PHP 运行用户不一致,文件建了却读不到。
总结
WordPress 无法上传图片的排查思路是:先看 wp-content/uploads 目录权限和属主,再检查内存、上传大小和 GD/Imagick 扩展,最后排除 mod_security、WAF 与安全插件的拦截,别忘了顺带看一眼磁盘空间。绝大多数「媒体库报错」都落在权限和内存这两点上,改完记得重启 PHP 并清理缓存验证。按这个顺序走一遍,WordPress 无法上传图片的问题通常都能定位并解决。
