php - 在 php 中使用 curl 从 FTP 下载文件

标签 php curl ftp

我正在制作一个 php 脚本,旨在在 CLI 中运行,这将帮助我在 ftp 服务器上下载文件。 我将向您展示到底出了什么问题,但在向您解释背景之前。

我在一个共享老游戏图像文件的网站上注册。当我们想下载这个网站上的文件时,我们必须登录才能检索下载链接。然后,给出的链接是一个FTP下载链接。

我使用 Wireshark 捕获了 FTP 连接数据包,并将其与失败的脚本 FTP 传输进行了比较。

所以,.. FTP 服务器接受匿名连接。 当我使用浏览器下载文件时,文件的链接是这样的;

ftp://website.url/somefolder/1/foo/bar/SOMEOLDIE.rar

现在,如果我使用 FileZilla 连接到此 FTP,使用匿名登录,我会获得访问权限,我会看到一些文件夹,但是当我转到我的 iso 所在的“somefolder”时,该文件夹是空的。

看看这张图片,然后我会告诉你代码。 enter image description here 现在是代码;

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

最佳答案

好的,伙计们,我明白了:)

我使用 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);

有效!!

关于php - 在 php 中使用 curl 从 FTP 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14214181/

相关文章:

php - 在弹性 beantalk 部署上的 ec2 微型实例上创建交换文件/驱动器

php - zend框架负载均衡

php - 在 Symfony 3 中将参数从 Controller 传递到表单类型 __construct

ios - Error Domain=NSURLErrorDomain Code=-1005 对 Uber-api 的 curl 请求

php - 使用 PHP 下载远程文件 (2GB)

bash - 如何使用 Bash 脚本将 (FTP) 文件上传到服务器?

javascript - 使用 HTML <select> <option> OnChange 更改 PHP 变量并执行 mysql 查询

php - 我在带有 PHP 7 的 Ubuntu 16 上安装了 cURL,但我仍然调用未定义的函数 curl_init()

php - 获取字符串格式的 curl 响应

scala - 从 Scala 访问 FTP 文件