曾几何时,PHP领域出现了正常错误:
警告:ftp_nlist():data_accept:第29行[path]中的SSL / TLS握手失败
但是这里有捕获,"line 29"不是连接或登录,请注意它是如何引用 ftp_nlist()
函数的:
$ftp = ftp_ssl_connect($cred['host'], $cred['port'], 180);
if (!ftp_login($ftp, $cred['user'], $cred['pass'])) {die("Login Failed");}
ftp_pasv($ftp, true);
$files = ftp_nlist($ftp, '');
OpenSSL在 phpinfo()
中编译并启用,如下所示:ftp_login() : SSL/TLS handshake failed
我见过的其他帖子似乎都引用了 ftp_ssl_connect()
或 ftp_login()
命令中的错误,这些命令对我有用 . 当 ftp_login()
返回true时,我可以检查什么?
或者......是否有任何日志可以获得有关错误的更多详细信息?
12-28-2017更新:升级到5.6已解决,所以看起来马丁就是重点 .
1 回答
ftp_nlist
打开数据连接 . 该连接也需要TLS / SSL握手 .随着控制连接握手成功,问题确实不能在PHP中缺少TLS / SSL支持 . 问题都不在于服务器和PHP无法找到同意的密码 .
当控制连接上的握手成功后数据连接上的TLS / SSL握手失败时,通常是因为客户端(PHP)没有从数据连接上的控制连接重用TLS / SSL会话(请参阅Why is session reuse useful in FTPS?) . 有些服务器需要这样做 . 从5.6.26开始,PHP仅支持重用 . 见PHP Bug 70195 . 因此,请确保至少使用该版本的PHP .