Вам не нужен php, чтобы пользователь мог скачивать файлы непосредственно с сервера SFTP, если вы добавили прямую ссылку на файл в свой html (т. Е. Скачать текст). Конечно, это не сработает, если вы не хотите публиковать учетные данные для сервера ftp.
Если вы хотите вытащить файл из SFTP через ваш сервер, вы, дефинити, должны загрузить файл на сервер, прежде чем отправлять его обратно в браузер пользователей.
Для этого существует множество решений. Наименее накладные расходы, вероятно, пришел с использованием phpseclib ниже
<?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, то это также вызывает проблемы.
Если вы хотите взять его на шаг дальше, вы можете попробовать
//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 Manual Documentation. Использование curl_exec() без установки параметра CURLOPT_RETURNTRANSFER в true вызывает завихрение отправки вывода (файла) непосредственно в браузер.
PHP имеет [функции FTP] (http://www.php.net/manual/en/ref.ftp.php) – DarkBee
* <предыдущий комментарий redacted> * Ничего, я просто понял, что вы имеете в виду. Все, что вам нужно сделать, это принудительно загрузить с помощью 'Content-Disposition: attachment; filename = "yourfile.ext" и эхо-данные, как вы это делаете. – DaveRandom
Cheers @DaveRandom - это, похоже, сработало! – coffeedoughnuts