ファイルへの直接リンクを html に追加する場合 (つまり、テキストのダウンロード)、ユーザーが SFTP サーバーから直接ダウンロードできるようにするために、php は必要ありません。もちろん、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 マニュアル ドキュメントを参照してください。CURLOPT_RETURNTRANSFER オプションを true に設定せずに curl_exec() を使用すると、curl は出力 (ファイル) をブラウザーに直接送信します。