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

时间:2015-02-10 13:45:48

标签: php io 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://output或标准输出(我真的不知道这个PHP范围)。

我找到了readfile()函数,但它将文件名作为参数,而不是ftp_fget()需要的资源...... 是否有其他函数与fget_fget或其他方法兼容< /强>

1 个答案:

答案 0 :(得分:1)

您的问题由两部分组成:

  1. 将FTP文件作为流阅读(请参阅fread()示例:“PHP: How do I read a .txt file from FTP server into a variable?”)

  2. Streaming a Response in Symfony2