WordPress 迁移后出现 ftp_fget() Fatal 错误排查记录

一、背景

  • 原服务器运行正常
  • 使用 宝塔系统迁移 更换服务器
  • 迁移完成后:
    • 升级插件时要求输入 FTP 密码
    • import-markdown 插件无法使用
    • 报错:
Fatal error: Uncaught TypeError:
ftp_fget(): Argument #1 ($ftp) must be of type FTPConnection, null given

二、问题本质

迁移后,站点目录属主发生变化。

新服务器中:

  • 网站目录属主 ≠ PHP-FPM 运行用户
  • WordPress 无法直接写入文件
  • WP 自动切换文件系统模式为:
ftpext
  • 但服务器未配置 FTP
  • FTP 连接为 null
  • 调用 ftp_fget(null) → 直接 Fatal

本质是:

文件权限问题 → WP 误判为必须使用 FTP → 但 FTP 未配置 → 崩溃

三、为什么迁移后才出现?

宝塔“系统迁移”会复制文件,但不会保证:

  • 目标服务器 PHP 运行用户一致
  • 目录属主一致

常见情况:

旧服务器:

www:www

新服务器:

root:root

或相反。

权限逻辑断裂。

四、解决方案

重新设置目录属主:

chown -R www:www /www/wwwroot/blog.floqo.cn
chmod -R 755 /www/wwwroot/blog.floqo.cn

执行后:

  • WordPress 可以使用 direct
  • 不再提示 FTP
  • 插件恢复正常
  • Fatal 消失

五、WordPress 文件系统机制简述

WP 写文件流程:

1. 尝试 direct
2. 若当前用户无写权限
3. 自动切换 ftpext
4. 若 FTP 未成功连接
5. ftp_fget(null) → Fatal

因此:

看到 FTP 报错,优先查权限。

六、经验总结

服务器迁移后必须检查:

  • 目录属主
  • PHP-FPM 运行用户
  • 文件权限

当时就应该检查权限,而不是去填 FTP,这类问题在宝塔迁移场景里非常常见。