使用 PHP 下载 FTP 文件 [重复]

Posted

技术标签:

【中文标题】使用 PHP 下载 FTP 文件 [重复]【英文标题】:FTP file download with PHP [duplicate] 【发布时间】:2021-12-23 14:06:56 【问题描述】:

我正在尝试使用 FTP 在我的网页上制作一个下载按钮。 但是当我尝试这样做时,下载的文件会保存到托管我的网站的机器上,而不是我想要的用户 PC 上。是不是不行,所以可以像下图一样从FTP正常下载文件?

这是我现在拥有的下载FTP功能,它将文件下载到我的网站项目文件夹中..


function FTP_download($id)
    ob_end_flush();
    $remote_file = $id.'.log';
    $local_file = $id.'.log';

    $conn_id = ftp_connect($this->ftp_server);
    $login_result = ftp_login($conn_id, $this->ftp_user_name, $this->ftp_user_pass);

    // try to download $server_file and save to $local_file
    if (ftp_get($conn_id, $local_file, $remote_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.net/manual/en/function.readfile.php。那不是FTP。您无法更改发出请求的协议。 @user3783243 啊啊我明白了,所以我必须下载.php 文件并包含一些特定的headers,然后使用readfile 函数来创建下载? :) 您不一定需要单独的文件,但是您需要让 PHP 将文件转发到客户端 @ADyson 刚刚尝试了readfile,它输出了我的text file 的内容,所以我想我必须制作一些其他文件并下载headers? 您可以将标头调用放在此文件中。这告诉浏览器该做什么。你本机说它是 html,所以浏览器会这样渲染它。 【参考方案1】:

所以我已经为下载我的.log 文件制定了解决方案

FTP_download.php

...
$file = $_GET['file'].'.log';
// 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);

// get the size of $file
$size = ftp_size($conn_id, $file);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $size);
readfile('ftp://'.$ftp_user_name.':'.urlencode($ftp_user_pass).'@'.$ftp_server.'/'.$file);
exit;

我有一个功能,其中包含指向此 .php 页面的下载链接

<?php
function FTP_download($id)
    ?> <a href="ftp_download.php?file=<?php echo $id; ?>" download> Download logfile</a> <?php

?>

【讨论】:

无论如何登录后,使用ftp:// 效率低下,因为您不必要地创建另一个连接,请使用ftp_get($conn_id, "php://output", $file, FTP_BINARY);,如***.com/q/47240635/850848 所示 我应该删除连接/登录部分吗?

以上是关于使用 PHP 下载 FTP 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 FTP 下载文件并使用 PHP 将其流式传输到客户端

PHP 从FTP服务器下载文件并将其保存在本地文件中。

php curl ftp上传 下载

为啥我不能下载用 PHP 上传的文件?

Linux之wget下载

ftp上传下载文件