使用 Curl 和 PHP 从 FTP 下载文件


Download a file from an FTP using Curl with PHP

我正在尝试使用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 在下载文件时像浏览器一样运行?

我知道这不能以应有的方式回答您的问题(使用 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://为前缀。