В настоящее время я использую аналогичную версию приведенного ниже кода для передачи файла с удаленного сервера на мой веб-сервер, а затем перенаправляю на веб-сервер копию файла в общедоступном веб-расположении.
$tempfile = "/mylocalfolder/tempfile.wav"
if (file_exists($tempfile)) {
unlink($tempfile);
}
$selectedfile = htmlspecialchars($_GET["File"]);
$filelink = '/myremotefolder/'.$selectedfile;
$connection = ssh2_connect($remote_server_ip, 22);
ssh2_auth_password($connection, 'username', 'password');
//echo $filelink.','. $tempfile;
ssh2_scp_recv($connection, $filelink, "/mylocalfolder/tempfile.wav");
header( 'Location: /mylocalfolder/recording.wav' ) ;
Я также получаю некоторые файлы из Amazon S3, используя их API. Когда я использую этот метод, API возвращает файл как объект, поэтому я могу отправить его прямо в браузер с соответствующими заголовками. как пример ниже.
// Display the object in the browser
header("Content-Type: {$result['ContentType']}");
header("Content-Type: audio/wav");
echo $result['Body'];
}
Мой вопрос заключается в том, как можно передавать / получать файл с удаленного сервера и отправлять его в браузер так же, как и в нижней версии, без создания физической копии на веб-сервере. Спасибо заранее
Вы можете использовать ssh2_sftp http://php.net/manual/en/function.ssh2-sftp.php … вы должны установить ssh2 привязки как расширение PECL (http://php.net/manual/es/book.ssh2.php)
Пример кода может быть …
$sftp = ssh2_sftp($connection);
$remote = fopen("ssh2.sftp://$sftp/path/to/file", 'rb');
header( 'Content-type: ......');
while(!feof($remote)){
echo( fread($remote, 4096));
}
Я не проверял код, но он должен работать.
Ты можешь использовать phpseclib скачать файл:
require_once 'Net/SFTP.php';
$connection = new Net_SFTP($remote_server_ip);
if (!$connection->login('username', 'password')) die('Login Error');
// set some appropriate content headers
echo $connection->get($filelink);
Или вы можете использовать ssh2.sftp
обертка — см. ответ SilvioQ для этого подхода.