提问者:小点点

如何流式传输从FTP获取的文件而不将其存储在本地?


我需要为我的门户网站终端用户提供存储在FTP服务器上的文件。

我创建了一个本地临时文件,将FTP文件下载到临时文件中,完成后,我将其与Symfony的文件HTTP响应一起发送:

$tempPath = tempnam(sys_get_temp_dir(), 'ftp');

$tempFile = fopen($tempPath, 'a+');

$log = "myLog";
$pass = "myPwd";

$conn_id = ftp_connect('my.ftp.server');
$ftp_login = ftp_login($conn_id, $log, $pass);

ftp_fget($conn_id, $tempFile, $path, FTP_ASCII, 0);
ftp_close($conn_id);

fclose($tempFile);

return $app->sendFile($tempPath, 200, array('Content-Type' => 'application/force-download', 'Content-disposition' => "attachment; filename=myFile.zip"));

它的工作,但我会做得更好(确保临时文件删除,提高性能,…)

我看到Symfony提供了HTTP流式响应帮助器,因此我设想发送FTP文件而不将其存储在web服务器的硬盘上。

为了得到它,我想我需要连接ftp_fget()函数(或其他FTP函数)到一个PHP函数,该函数可以将其输出到php://输出或标准输出(我真的不知道这个PHP范围)。

我找到了readfile()函数,但它将文件名作为参数,而不是像ftp\u fget()need这样的资源。。。是否有其他与fget_fget兼容的功能或其他方式?


共1个答案

匿名用户

您的问题由两部分组成:

>

  • 将FTP文件作为流读取(参见fread()的示例:PHP:如何将. txt文件从FTP服务器读取到变量中?)

    在Symfony2中流式传输响应

  • 相关问题