Как загрузить файл с SFTP-сервера с помощью PHP

Я хочу разрешить пользователю загружать файл непосредственно с сервера sftp, но в браузере.

Я нашел методы для чтения файла и эхо-строки (соединения с использованием ssh2.sftp или phpseclib), но мне нужно скачать, а не читать.

  • Использование php для загрузки pdf-файла
  • Force-Download с php на Amazon S3
  • Файлы иногда загружаются как .PHP вместо .PDF?
  • Как создать zip-файл с помощью php и удалить его после загрузки пользователем?
  • PHP readfile () и большие загрузки
  • Загрузка больших файлов в PHP
  • Кроме того, я видел решения, предлагающие загрузить с сервера sftp на веб-сервер, а затем использовать readfile () с веб-сервера на локальный диск пользователя. Но это означает две передачи файлов, и если файл большой, я думаю, что это будет медленным.

    Вы можете скачать прямо с sftp на диск пользователя?

    Приветствия за любые ответы!

  • php mail () Идет спам, но когда он отправляется через SMTP-сервер, он работает нормально?
  • загружать несколько изображений с помощью jquery ajax и обрабатывать их с помощью php
  • отправьте два запроса ajax одновременно в symfony
  • AJAX jQuery обновляет div каждые 5 секунд
  • Сокращение PHP для isset ()?
  • Проблема с json_decode PHP
  • One Solution collect form web for “Как загрузить файл с SFTP-сервера с помощью PHP”

    Вам не нужен какой-либо 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 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'); ?> 

    К сожалению, если файл больше, чем разрешено в памяти с помощью конфигурации server / 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 . Использование curl_exec () без установки параметра CURLOPT_RETURNTRANSFER в true вызывает завихрение отправки вывода (файла) непосредственно в браузер.

    PHP is the Best Programming Language in the world.