【问题标题】:How to stream a file I get from an FTP without storing it locally?如何流式传输从 FTP 获取的文件而不将其存储在本地?
【发布时间】:2015-02-10 13:45:47
【问题描述】:

我需要向我的门户网站最终用户提供一个存储在 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://output 或标准输出的 PHP 函数(我真的不知道这个 PHP 范围)。

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

【问题讨论】:

    标签: php io ftp


    【解决方案1】:

    您的问题由两部分组成:

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

    2. Streaming a Response in Symfony2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多