文件从FTP下载到php://输出不起作用

问题描述 投票:2回答:1

我用PHP制作了一个网站,我必须从FTP服务器下载一个文件。

我不想暂时将文件保存在Web服务器上,因此我将其保存在PHP缓冲区中。但是当我下载它时,缓冲区显然是空的,因为文件名匹配但文件为空。

这是我的代码

ob_start();
ftp_chdir($conn_id, $_REQUEST["path"]);
ftp_get($conn_id, "php://output", $_REQUEST["remoteFile"], FTP_BINARY);
$data = ob_get_contents();
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='. $_REQUEST["remoteFile"]);
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . strlen($data));
echo $data;
ob_end_clean();
exit;

例如,当我尝试下载之前正确上传的txt文件时,文件名就可以了,但内容为空。

php ftp buffer
1个回答
2
投票

在您调用echo $data;时,输出缓冲仍然存在。因此,您将数据(第二次)写回输出缓冲区。然后你清除它。所以什么也没输出。

只需还原echo $data;ob_end_clean();电话:

ob_end_clean();
echo $data;

虽然更简单的方法是做一些事情:

$data = file_get_contents("ftp://username:[email protected]/path/file.dat");
header(...);
echo $data;

假设ftp:// protocol wrappers已启用。

而且你不需要任何缓冲。而且你也不会在任何时候在内存中有两次文件。

© www.soinside.com 2019 - 2024. All rights reserved.