1 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
生成的<a>標(biāo)簽中的鏈接指向不包含鏈接文件的 Web 服務(wù)器。
您需要做的是鏈接到 PHP 腳本,為其指定要下載的文件的名稱(chēng)。然后腳本將從 SFTP 服務(wù)器下載文件并將下載的文件傳回給用戶(到網(wǎng)絡(luò)瀏覽器)。
echo '<a href="download.php?file='.urlencode($entry).'">'.htmlspecialchars($entry).'</a>';
download.php腳本的一個(gè)非常簡(jiǎn)單的版本:
<?
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"]);
盡管對(duì)于真正正確的解決方案,您應(yīng)該提供一些與文件相關(guān)的 HTTP 標(biāo)頭,例如Content-Length,Content-Type和Content-Disposition。
同樣,上面的簡(jiǎn)單示例將首先從 SFTP 服務(wù)器下載整個(gè)文件到網(wǎng)絡(luò)服務(wù)器。只有這樣它才會(huì)開(kāi)始將其流式傳輸給用戶(網(wǎng)絡(luò)瀏覽器)。什么是浪費(fèi)時(shí)間和網(wǎng)絡(luò)服務(wù)器上的內(nèi)存(如果文件足夠大)。
看到一個(gè)類(lèi)似的(雖然是 FTP,而不是 SFTP)問(wèn)題:
Download file via PHP script from FTP server to browser with Content-Length header without stores the file on the web server
您可能還想自動(dòng)檢測(cè)Content-Type,除非您的所有文件都屬于同一類(lèi)型。
您當(dāng)然可以使用URL 重寫(xiě)來(lái)使 URL 更漂亮。
即轉(zhuǎn)向download.php?file=myfile.txt例如download/myfile.txt。
- 1 回答
- 0 關(guān)注
- 243 瀏覽
添加回答
舉報(bào)