WordPress 更新提示“无法创建目录”通常是因为文件权限配置不当、磁盘空间不足或 PHP 进程用户无权写入。最直接的解决办法是检查 wp-content 目录权限并修正所有者,同时排除磁盘满载情况。
先说结论:多数情况是 Web 服务器用户没有写入权限,或者磁盘已满,优先排查权限和空间。
- 先确认磁盘空间是否充足
- 根据服务器环境(SSH/面板/FTP)修正 wp-content 目录的所有者和权限
- 必要时开启调试日志定位具体错误
- 验证后台更新功能是否恢复
核心原因分析
WordPress 在更新时需要向服务器写入临时文件,默认路径通常在 wp-content/upgrade。如果运行 PHP 的进程用户(如 www-data、nginx 或面板用户)对该目录没有写入权限,就会报错。另外,如果服务器磁盘空间已满,也无法创建新目录。
还有一种情况是服务器限制了 PHP 的直接文件写入,强制要求通过 FTP 更新,但配置未正确设置。
场景一:拥有 SSH 权限
如果你能通过 SSH 连接服务器,可以尝试以下命令快速检查和处理。注意区分目录和文件权限,符合最小权限原则。
# 1. 检查磁盘空间
df -h
# 2. 修正所有者(用户组根据实际情况,如 www-data, nginx, apache)
chown -R www-data:www-data /path/to/wordpress
# 3. 修正权限(目录 755,文件 644)
find /path/to/wordpress -type d -exec chmod 755 {} \; && find /path/to/wordpress -type f -exec chmod 644 {} \;注意:请将 /path/to/wordpress 替换为实际网站路径。www-data 是常见用户,实际可能是 nginx、apache 或特定面板用户,可通过 ps aux | grep php 查看。
场景二:无 SSH 权限(面板或 FTP)
对于虚拟主机或不便使用 SSH 的用户,可通过文件管理器或 FTP 客户端修改。
1. 宝塔/cPanel 面板
登录面板文件管理,找到 WordPress 根目录。右键点击 wp-content 文件夹,选择“权限”。所有者通常无需修改,确保“写入”权限勾选。权限值建议设置为 755。内部文件权限建议为 644。
2. FTP 客户端(如 FileZilla)
连接服务器后,右键点击 wp-content 目录,选择“文件权限”。勾选“写入”,权限值填 755。建议勾选“递归应用到子目录”,但需注意不要将文件权限也设为可执行,部分客户端支持区分文件与目录,若不支持,后续需在后台验证安全性。
查看错误日志定位问题
如果权限修改后仍报错,建议开启 WordPress 调试模式查看具体日志。
在 wp-config.php 文件中,找到 /* That's all, stop editing! Happy publishing. */ 之前,添加或修改以下配置:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );保存后再次尝试更新,错误信息会记录在 wp-content/debug.log 文件中。查看该文件末尾内容,可定位是权限拒绝还是磁盘 quota 限制。
配置文件调整(谨慎使用)
如果权限无误但仍报错,可能是服务器限制了 PHP 直接写入。可以在 wp-config.php 文件中添加定义,强制使用直接文件系统访问:
define( 'FS_METHOD', 'direct' );注意:此配置可能掩盖真正的权限配置错误。仅在确认文件所有者正确且权限无误的情况下使用。更新完成后,建议观察网站运行状态。
验证与安全加固
回到 WordPress 后台,尝试再次点击更新按钮。如果不再提示“无法创建目录”,且更新进度条正常走动,说明问题已解决。
安全建议:
- 不要为了方便直接将所有文件权限设置为 777,这会带来严重的安全风险。
- 更新完成后,如果之前修改了所有权,建议根据 hosting 环境的要求恢复原有配置。
- 如果使用了安全插件,检查是否锁定了 wp-content 目录。
- 调试完成后,记得将 WP_DEBUG 设置为 false,避免日志暴露敏感信息。
参考来源
- WordPress Support - Changing File Permissions: https://wordpress.org/support/article/changing-file-permissions/
- WordPress Support - Editing wp-config.php - Filesystem Method: https://wordpress.org/support/article/editing-wp-config-php/#filesystem-method