PHP如何使用TLS上的隐式FTP连接到FTP

时间:2017-08-03 03:59:51

标签: php curl ftp

显然FTP的本机FTP功能不支持隐式FTP over TLS

我使用Curl尝试了这个但是不起作用:

$ftp_server = 'data.example.com/file.csv'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $ftp_server);
curl_setopt($ch, CURLOPT_USERPWD,'abcde'.':'.'123456');
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);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
$file = fopen('local_file.csv', "w+");
curl_setopt($ch, CURLOPT_FILE, $file);

$data = curl_exec($ch);
$error_no = curl_errno($ch);

curl_close($ch);

如果我尝试在URL中没有文件名,我会看到到达服务器,因为我得到了一个IIS欢迎页面。如果我尝试使用该文件,则会出现404错误。我知道文件是准确的,因为我可以通过Filezilla访问。

谢谢

1 个答案:

答案 0 :(得分:2)

您的网址应包含该方案,例如:

$ftp_server = 'ftps://data.example.com/file.csv'; 

来自CURLOPT_URL explained

  

如果给定的URL缺少方案名称(例如“http://”或“ftp://”等),则libcurl将根据主机进行猜测。如果最外面的子域名与DICT,FTP,IMAP,LDAP,POP3或SMTP匹配,则将使用该协议,否则将使用HTTP。

您正在访问IIS欢迎页面和404错误,因为您正在发出http请求而不是通过ftps进行连接。