1 回答
TA贡献1936条经验 获得超6个赞
生成的<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 关注
- 224 浏览
添加回答
举报