WordPress 迁移后出现 ftp_fget() Fatal 错误排查记录
- 笔记
- 8小时前
- 9热度
- 0评论
一、背景
- 原服务器运行正常
- 使用 宝塔系统迁移 更换服务器
- 迁移完成后:
- 升级插件时要求输入 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,这类问题在宝塔迁移场景里非常常见。