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
相关产品推荐
相关产品推荐

