2015-09-03 143 views
1

我试图使用加密作为显式FTP通过TLS连接到FTP服务器。CURL - 通过TLS连接显式FTP

curl_setopt($ch, CURLOPT_URL, 'ftp.mydomain.com/orders'.$filename); 
curl_setopt($ch, CURLOPT_USERPWD, 'uname:pwd'); 
curl_setopt($ch, CURLOPT_UPLOAD, 1); 
curl_setopt($ch, CURLOPT_INFILE, $fp); 
curl_setopt($ch, CURLOPT_PORT, 21); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile)); 
curl_exec ($ch); 
$error_no = curl_errno($ch); 

我必须将文件上传到此位置,但在连接到服务器时,它会给出错误号56(响应读取失败)。 我不确定我是否使用正确的选项来通过TLS显式连接FTP。

+1

有你有现成的FTP程序试图用相同的属性来访问服务器在你的代码? – hoijui

+0

'curl_error'返回什么? –

+0

它返回消息“响应阅读失败”。 – SandyK

回答

2

不仅你没有启用TLS/SSL。你甚至没有指定要使用的协议。 CURL默认为HTTP。因此,您的代码失败,因为CURL试图与HTTP服务器通话。

要选择FTP和强制TLS/SSL:

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_FTP); 
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_ALL); 
-1

与下面的代码尝试 -

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY); 
curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS); 
+0

建议不要验证TLS/SSL证书是一种不好的做法。特别是没有任何解释。 –