1

我正在尝试使用 Curl 从 FTP 服务器下载文件。我可以将 URL 粘贴到我的浏览器中,它可以正常下载。问题是使用 Curl 和 PHP,我相信 FTP 服务器正在执行重定向,而 Curl 不会跟随。我收到错误消息“服务器拒绝您更改到给定目录”。

编辑:我在代码中有 %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);

有什么方法可以强制 Curl 在下载文件时按照浏览器的方式行事?

4

1 回答 1

0

我知道这不会以应有的方式回答您的问题(使用 curl )。但这是一个非 curl 代码,用于使用 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。要将 sFTP 与 PHP 一起使用,请参阅 ssh2_sftp()。
  2. FTP 服务器地址参数不应有任何尾部斜杠,也不应以 ftp:// 为前缀。
于 2016-02-04T11:58:50.750 回答