我需要为我的门户网站终端用户提供存储在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兼容的功能或其他方式?
您的问题由两部分组成:
>
将FTP文件作为流读取(参见fread()
的示例:PHP:如何将. txt文件从FTP服务器读取到变量中?)
在Symfony2中流式传输响应