2012-04-29 215 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://作为前缀。