1 回答

TA貢獻1936條經驗 獲得超7個贊
生成的<a>標簽中的鏈接指向不包含鏈接文件的 Web 服務器。
您需要做的是鏈接到 PHP 腳本,為其指定要下載的文件的名稱。然后腳本將從 SFTP 服務器下載文件并將下載的文件傳回給用戶(到網絡瀏覽器)。
echo '<a href="download.php?file='.urlencode($entry).'">'.htmlspecialchars($entry).'</a>';
download.php腳本的一個非常簡單的版本:
<?
header('Content-Type: application/octet-stream');
$connection = ssh2_connect('url', 22);
ssh2_auth_password($connection, username, password);
$sftp = ssh2_sftp($connection);
$sftp_fd = intval($sftp);
echo file_get_contents("ssh2.sftp://$sftp_fd/path/to/remote/dir/" . $_GET["file"]);
盡管對于真正正確的解決方案,您應該提供一些與文件相關的 HTTP 標頭,例如Content-Length,Content-Type和Content-Disposition。
同樣,上面的簡單示例將首先從 SFTP 服務器下載整個文件到網絡服務器。只有這樣它才會開始將其流式傳輸給用戶(網絡瀏覽器)。什么是浪費時間和網絡服務器上的內存(如果文件足夠大)。
看到一個類似的(雖然是 FTP,而不是 SFTP)問題:
Download file via PHP script from FTP server to browser with Content-Length header without stores the file on the web server
您可能還想自動檢測Content-Type,除非您的所有文件都屬于同一類型。
您當然可以使用URL 重寫來使 URL 更漂亮。
即轉向download.php?file=myfile.txt例如download/myfile.txt。
- 1 回答
- 0 關注
- 261 瀏覽
添加回答
舉報