2017-08-03 140 views
0
到FTP

顯然FTP的本地FTP功能不支持隱式FTP通過TLSPHP如何連接使用隱式FTP通過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訪問。

謝謝

+0

__'ftps://'__'data.example.com/file.csv' – hanshenrik

+0

完美!夠簡單。 – user2029890

回答

2

你的URL應包含方案,如:

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

CURLOPT_URL explained

如果給定的URL缺少方案名稱(例如「http: //「或」ftp://「等),然後libcurl會根據主機進行猜測。如果最外面的子域名與DICT,FTP,IMAP,LDAP,POP3或SMTP匹配,那麼將使用該協議,否則將使用HTTP。

由於您發出的是http請求,而不是通過ftps進行連接,您正在碰到IIS歡迎頁面和404錯誤。

+0

謝謝。 hanshenrik確實提供了相同的答案。我會給他信貸,但他沒有提供它作爲答案。 – user2029890

+0

@ user2029890 ^^很好,只需將其標記爲已接受即可。儘管如此,感謝你的體貼。 (ps,我建議不要讓curl猜測,作爲一般規則,是明確的,避免驚喜) – hanshenrik