如何使用 PHP 从 SFTP 服务器下载文件

2023-08-20php开发问题
6

本文介绍了如何使用 PHP 从 SFTP 服务器下载文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我希望允许用户直接从 sftp 服务器下载文件,但在浏览器中.

I'm looking to allow a user to download a file directly from an sftp server, but in the browser.

我找到了读取文件和回显字符串的方法(使用 ssh2.sftp 或 phpseclib 连接),但我需要下载,而不是读取.

I've found methods to read the file and echo the string (connections using ssh2.sftp or phpseclib) but I need to download, rather than read.

此外,我看到的解决方案建议从 sftp 服务器下载到 Web 服务器,然后使用 readfile() 从 Web 服务器到用户的本地磁盘.但这意味着两个文件传输,如果文件很大,我想这会很慢.

Also, I've seen solutions that suggest downloading from the sftp server to the web server, then use readfile() from the web server to the user's local disk. But this means two file transfers, and if the file is large I imagine this would be slow.

您可以直接从 sftp 下载到用户磁盘吗?

Can you download directly from sftp to the user's disk?

为任何回复干杯!

推荐答案

您不需要任何 php 来允许用户直接从 SFTP 服务器下载,如果您将文件的直接链接添加到您的 html(即下载文本).当然,如果您不想公开 ftp 服务器的凭据,这将不起作用.

You don't need any php in order to allow the user to download directly from the SFTP server, if you add a direct link to the file to your html (i.e. Download Text). Of course this won't work if you don't want to make the credentials for the ftp server public.

如果您想通过服务器从 SFTP 中提取文件,根据定义,您必须先将文件下载到服务器,然后再将其发送回用户浏览器.

If you are looking to pull the file from the SFTP through your server, you, by deffinition, must download the file to the server before sending it back out to the users browser.

为此,有很多很多解决方案.最少的开销可能来自使用phpseclib如下

For this there are many, many solutions. The least overhead would probably come from using phpseclib as below

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

//adds the proper headers to tell browser to download rather than display
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename="filename.remote""); 

// outputs the contents of filename.remote to the screen
echo $sftp->get('filename.remote');
?>

不幸的是,如果文件比您的服务器/php 配置允许的内存大,那么这很可能会导致问题.

Unfortunately, if the file is larger than is allowed in memory by your server/php configuration, then this well cause problems.

如果你想更进一步,你可以试试

If you want to take it a step further, you might try

//adds the proper headers to tell browser to download rather than display
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename="filename.remote""); 

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "sftp://full_file_url.file"); #input
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
curl_exec($curl);
curl_close($curl);

有关使用 cURL 的更多信息可以在 PHP 手册文档.使用 curl_exec() 而不将 CURLOPT_RETURNTRANSFER 选项设置为 true 会导致 curl 将输出(文件)直接发送到浏览器.

More information on using cURL can be found in the PHP Manual Documentation. Using curl_exec() without setting the CURLOPT_RETURNTRANSFER option to true causes curl to send the output (the file) directly to the browser.

这篇关于如何使用 PHP 从 SFTP 服务器下载文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17