我需要向我的门户网站最终用户提供存储在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或其他方法兼容< /强>
答案 0 :(得分:1)
您的问题由两部分组成:
将FTP文件作为流阅读(请参阅fread()
示例:“PHP: How do I read a .txt file from FTP server into a variable?”)