Как загрузить файл с SFTP-сервера с помощью PHP
Я хочу разрешить пользователю загружать файл непосредственно с сервера sftp, но в браузере.
Я нашел методы для чтения файла и эхо-строки (соединения с использованием ssh2.sftp или phpseclib), но мне нужно скачать, а не читать.
Кроме того, я видел решения, предлагающие загрузить с сервера sftp на веб-сервер, а затем использовать readfile () с веб-сервера на локальный диск пользователя. Но это означает две передачи файлов, и если файл большой, я думаю, что это будет медленным.
Вы можете скачать прямо с sftp на диск пользователя?
Приветствия за любые ответы!
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 вызывает завихрение отправки вывода (файла) непосредственно в браузер.