很久以前,PHP版本中出现了正常错误:
警告:ftp_nlist():data_accept:第29行[路径]中的SSL / TLS握手失败
但是这里有捕获,“第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, '');
OpenTraSL在phpinfo()
中编译并启用,如下所示:
ftp_login() : SSL/TLS handshake failed
我见过的其他帖子似乎都引用了ftp_ssl_connect()
或ftp_login()
命令中的错误。 ftp_login()
何时返回true,我可以检查什么?
或者......是否有任何日志可以获得有关错误的更多详细信息?
12-28-2017更新: 升级到5.6已经解决了,所以看起来马丁就好了。
答案 0 :(得分: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。
答案 1 :(得分:1)
尽管这个问题已经很久了,但是如果有人遇到了这个问题:
如果您的ftp_ssl_connect
和ftp_login
正常运行,但ftp_nlist
,ftp_put
,ftp_fput
之类的功能不起作用,则可能是您的FTP服务器正在使用端口21
进行连接,但使用不同的端口范围进行数据传输,这说明了为什么可以连接和登录但不能上传或下载数据,并且需要允许到这些端口范围的传出连接在您的防火墙中