亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何列出和創建遠程 SFTP 文件的下載鏈接

如何列出和創建遠程 SFTP 文件的下載鏈接

PHP
達令說 2021-12-03 19:40:13
我試圖列出遠程 SFTP 服務器中某個目錄中的所有文件作為下載鏈接,以便用戶可以選擇下載這些文件。到目前為止,我已經能夠讀取并列出特定目錄中的所有文件作為下載鏈接,但是當我嘗試通過右鍵單擊并選擇將鏈接另存為...來實際下載文件時,我收到“失敗 - 沒有文件“ 信息。 我的結果圖片<?php$connection = ssh2_connect('url', 22);ssh2_auth_password($connection, username, password);$sftp = ssh2_sftp($connection);$sftp_fd = intval($sftp);if ($handle = opendir("ssh2.sftp://$sftp_fd/path/to/remote/dir/")) {   while (($entry = readdir($handle)) !== false) {      if ($entry == "." || $entry == "..") { continue; }      echo '<a href="/path/to/remote/dir/' .$entry. '">' .$entry. '<br>'.'</a>';   }   closedir($handle);}?>     
查看完整描述

1 回答

?
LEATH

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。


查看完整回答
反對 回復 2021-12-03
  • 1 回答
  • 0 關注
  • 261 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號