You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中ftp_login凭证正确却登录失败的技术求助

问题根源:你的PHP代码用的是明文FTP,而服务器强制要求FTPS

首先可以确定:你的账号密码完全没问题!报错看起来是凭证错误,但实际是连接方式不符合服务器要求。

从你提供的FileZilla日志就能看出来:

  • 成功登录的日志里,FileZilla先发送了AUTH TLS命令建立加密连接,之后才完成登录;
  • 当你禁用加密后,服务器直接返回提示:This server does not allow plain FTP. You have to use FTP over TLS.,接着登录就报了和PHP代码一样的错误。

而你用的ftp_connect()是PHP原生的明文FTP连接函数,完全不支持TLS加密,所以服务器直接拒绝了你的登录请求,表现为"登录或密码错误"的误导性提示。

解决方法:改用FTPS加密连接

PHP提供了ftp_ssl_connect()函数来建立FTP over TLS的加密连接,修改你的代码如下:

// 替换ftp_connect为ftp_ssl_connect,建立加密FTPS连接
$ftp_conn = ftp_ssl_connect('XXX.XX.XXX.XXX') or die("Could not connect to FTP server");

// 开启被动模式(大多数现代FTP服务器都需要这个设置)
ftp_pasv($ftp_conn, true);

// 执行登录
$login = ftp_login($ftp_conn, 'USER', 'PASS'); 
var_dump($login);

// 操作完成后记得关闭连接
if ($ftp_conn) {
    ftp_close($ftp_conn);
}

额外注意事项

  • 确保你的PHP环境已经启用了OpenSSL扩展,否则ftp_ssl_connect()会无法使用;
  • 如果还是遇到问题,可以开启FTP调试模式,查看详细的交互日志来排查:
    ftp_set_option($ftp_conn, FTP_OPT_DEBUG, 1);
    
  • 少数服务器可能使用隐式FTPS(默认端口990),如果连21端口失败,可以尝试把端口改成990:
    $ftp_conn = ftp_ssl_connect('XXX.XX.XXX.XXX', 990) or die("Could not connect");
    

内容的提问来源于stack exchange,提问作者rosyTown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:34:59