我正在制作一个php脚本,打算在CLI中运行,这将帮助我在ftp服务器上下载文件。 我将告诉你到底出了什么问题,但在此之前我会解释你的背景是什么。
我注册了一个分享老歌游戏图片文件的网站。当我们想要在此站点上下载文件时,我们必须进行注册以检索下载链接。然后,给出的链接是FTP下载链接。
我使用Wireshark捕获了FTP连接数据包,并将其与失败的脚本化FTP传输进行比较。
所以,.. FTP服务器接受匿名连接。 当我使用浏览器下载文件时,该文件的链接就是这样的;
ftp://website.url/somefolder/1/foo/bar/SOMEOLDIE.rar
现在,如果我使用FileZilla连接到这个FTP,使用匿名登录我可以访问,我看到一些文件夹,但是当我去“somefolder”我的iso必须是,文件夹是空的。
看看这张图片,然后我会告诉你代码。 现在是代码;
function download_file($url){
echo "Downloading: ".$url;
$ch = curl_init($url);
$fp = fopen("data/output.rar", "w");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_COOKIEFILE, 'data/cookies.txt');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//curl_setopt($ch, CURLOPT_FAILONERROR, 1);
//curl_setopt($ch, CURLOPT_FTPLISTONLY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "anonymous:mozilla@example.com");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
//var_dump(curl_getinfo($ch));
//echo curl_error($ch);
curl_close($ch);
fclose($fp);
}
任何人都可以帮助我吗?我不熟悉curl,我不知道如何告诉curl发送我想要的命令。
谢谢!
编辑:看看这个,它的问题完全一样; Need help downloading a file using PHP and Curl from an FTP答案 0 :(得分:2)
好的,我明白了:)
我使用ftp的ftp_ *函数代替curl,因为curl尝试更改目录,但是在这个ftp服务器上不允许这样做,所以我使用的代码是;
$local_file = 'output.rar';
$server_file = '/somedir/1/bar/foo/somearchive.rar';
$ftp_user_name='anonymous';
$ftp_user_pass='mozilla@example.com';
$ftp_server='server.host';
// set up basic connection
$conn_id = ftp_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 :(得分:0)
您需要向CURLOPT_URL提供文件的完整网址。此外,如果您想下载文件,您可能希望将其保存在某处。
工作示例:
$curl = curl_init();
$file = fopen("ls-lR.gz", 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://ftp.sunet.se/ls-lR.gz"); #input
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FILE, $file); #output
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
curl_exec($curl);
curl_close($curl);
fclose($file);