2012-04-29 124 views
1

我試圖使用Curl從FTP服務器下載文件。我可以將網址粘貼到我的瀏覽器中,並且可以正常下載。問題是,在Curl和PHP中,我相信FTP服務器正在做重定向,Curl不會遵循。我收到錯誤消息「服務器拒絕您更改爲給定的目錄」。使用Curl和PHP從FTP下載文件使用PHP

編輯:我在代碼中%2f並刪除它。這是來自先前的測試。

我的代碼是:

$curl = curl_init(); 
$file = fopen("temp.zip", 'w'); 
curl_setopt($curl, CURLOPT_URL, "ftp://idx.living.net/idx_fl_ftp_down/idx_naples_dn/naples_data.zip"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FILE, $file); 
curl_setopt($curl, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_SSL); 
curl_setopt($curl, CURLOPT_USERPWD, "myusername:mypassword"); 
curl_exec($curl); 
echo curl_error($curl); 

任何方式強迫捲曲表現在下載文件時,瀏覽器的方式做?

+0

從來沒有聽說過FTP服務器可以做重定向,這通常是HTTP協議的功能,而不是FTP協議。 – hakre

+0

我不認爲FTP協議有HTTP重定向響應。這可能不是你的問題。嘗試使用wireshark竊聽ftp連接以查看到底發生了什麼。 –

+0

路徑中的'/%2fidx_fl_ftp_down /'部分是否有效?不應該只是'/ idx_fl_ftp_down /'? '%2f'是'/'的url編碼。我認爲它可能試圖變成無效/不存在的目錄。 – drew010

回答

0

我知道這不會回答你的問題,它應該是(使用捲曲)。 但是,這裏有一個非捲曲代碼,用php下載ftp服務器上的文件。

$local_file = 'output.rar'; 
$server_file = '/somedir/1/bar/foo/somearchive.rar'; 
$ftp_user_name='some_login'; 
$ftp_user_pass='Password'; 
$ftp_server='HOST'; 
// set up basic connection 
$conn_id = ftp_ssl_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

/* uncomment if you need to change directories 
if (ftp_chdir($conn_id, "<directory>")) { 
    echo "Current directory is now: " . ftp_pwd($conn_id) . "\n"; 
} else { 
    echo "Couldn't change directory\n"; 
} 
*/ 

// try to download $server_file and save to $local_file 
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { 
    echo "Successfully written to $local_file\n"; 
} else { 
    echo "There was a problem\n"; 
} 

// close the connection 
ftp_close($conn_id); 

注:

  1. ftp_ssl_connect()不旨在與SFTP使用。要在PHP中使用sFTP,請參閱ssh2_sftp()。
  2. FTP服務器地址參數不應該有任何結尾的斜線,並且不應該以ftp://作爲前綴。