刚搭好站想传张封面图,结果被一句报错教做人了:「无法创建目录 wp-content/uploads/2026/10。它的父目录是否可以被服务器写入?」 相信不少站长都见过这句,今天把完整排障过程记录一下,以后直接照着抄。
报错在说什么
翻译成人话:PHP 进程没有权限在 wp-content/uploads 下创建按日期分的子目录(2026/10)。WordPress 默认把上传文件按「年/月」分目录存放,这目录建不出来,就报这个鬼了。
Step 1:查运行用户是谁(关键!)
ps aux | grep -E 'php|apache|nginx' | grep -v grep
重点看输出里 php-fpm: pool www 那些进程跑在哪个用户下。我这边查出来是 www-data(Debian/Ubuntu 系默认的 PHP 运行用户),那就得把目录属主给它:
Step 2:改属主 + 权限(标准解法)
# 换成你站点的实际路径!
sudo chown -R www-data:www-data /var/www/你的站点/wp-content
sudo chmod -R 755 /var/www/你的站点/wp-content
原理很朴素:「对的人」+「对的权限」。属主改成 PHP 运行用户,755 就够了;属主不对,开再高也是白瞎。
别一上来就 chmod 777!
很多人图省事直接 chmod -R 777——这相当于把门拆了。777 = 全世界可读写执行,万一 WordPress 出个洞,攻击者可以直接在站长目录里塞木马。正确姿势:属主改对 + 755/775,实在要偷懒也只给 wp-content 开 777,别碰其他目录。
Docker 部署的补充
如果是 Docker 跑的 WordPress,容器内用户是 www-data(uid 33),映射到宿主的目录经常是 root 属主导致写不进去。解决办法:
# 在宿主上执行,33 就是容器内 www-data 的 uid
sudo chown -R 33:33 /opt/wordpress/wp-content
sudo chmod -R 775 /opt/wordpress/wp-content
# 改完重启容器
sudo docker restart 你的容器名
验证
sudo -u www-data touch /var/www/你的站点/wp-content/uploads/test.txt && echo "能写!"
能建文件说明权限通了,删掉测试文件,回后台上传图片——这次应该秒传了😎
偷懒彩蛋
不想按月份分目录?后台 → 设置 → 媒体 → 取消勾选「按月份组织上传文件」,图片就直接进 uploads 根目录了。不过根目录没权限照样白搭,所以这招只是缓兵之计,正解永远是把属主改对。
踩坑总结:权限问题先查属主,再谈权限位,最后再考虑 777。 记不住的兄弟,把这篇收藏了。