列出并从FTP下载单击的文件



我有FTP,我需要在上传目录中列出FTP中的所有文件,单击任何列出的文件后,它将从FTP下载特定文件。

它在上传目录中列出了我的文件,但是当我尝试下载文件时,它会键入我"没有文件">

我的代码:

// connect and login to FTP server
$ftp_server = "IP";
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, "name", "password");
// list all files in upload directory and with "a" download file from FTP
$target_dir = "uploads/";
$files = ftp_nlist($ftp_conn, $target_dir);
foreach($files as $file) {
echo "<a href='$file' download>$file</a>";
echo "<br>";
}

生成的<a>标记中的链接指向不包含链接文件的 Web 服务器。

您需要做的是链接到PHP脚本,为其提供要下载的文件的名称。然后,该脚本将从FTP服务器下载文件,并将下载的文件传递回用户(到Web浏览器(。

echo "<a href="download.php?file=".urlencode($file)."">".htmlspecialchars($file)."</a>";

download.php脚本的一个非常简单的版本:

<?
header('Content-Type: application/octet-stream');
echo file_get_contents('ftp://username:password@ftp.example.com/path/' . $_GET["file"]);

download.php脚本使用 FTP URL 包装器。如果您的Web服务器不允许这样做,则必须使用FTP功能进行更难的尝试。看 PHP:如何将文件从FTP服务器读取到变量中?


虽然对于一个真正正确的解决方案,你应该提供一些与文件相关的HTTP标头,如Content-LengthContent-TypeContent-Disposition

此外,上面的简单示例将首先将整个文件从FTP服务器下载到Web服务器。只有这样,它才会开始将其流式传输给用户(网络浏览器(。什么是浪费时间,也是浪费网络服务器上的内存。

有关更好的解决方案,请参阅通过 PHP 脚本将文件从 FTP 服务器下载到具有 Content-Length 标头的浏览器,而无需将文件存储在 Web 服务器上。

您可能还希望自动检测Content-Type,除非您的所有文件都属于同一类型。


关于使用网页实现FTP上传的相关问题:
在PHP中显示最近从远程FTP服务器上传的图像

最新更新