Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件从FTP下载到php://output 不';行不通_Php_Ftp_Buffer - Fatal编程技术网

文件从FTP下载到php://output 不';行不通

文件从FTP下载到php://output 不';行不通,php,ftp,buffer,Php,Ftp,Buffer,我已经用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_conten

我已经用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文件时,文件名正常,但内容为空。

在调用
echo$data时,输出缓冲仍处于打开状态。因此,将数据写回(第二次)输出缓冲区。然后你清除它。所以什么也不输出

只需还原
echo$数据
ob_end_clean()调用:

ob_end_clean();
echo $data;

尽管更简单的方法是做以下事情:

$data = file_get_contents("ftp://username:password@ftp.example.com/path/file.dat");
header(...);
echo $data;
假设已启用


您不需要任何缓冲。而且您在任何时候都不会将文件在内存中保存两次。

ftp\u会得到什么返回?
ftp\u get
(或任何其他
ftp\u
函数)返回时是否发出任何PHP警告/错误?您是否可以在同一台计算机上下载该文件(例如,使用命令行
ftp
)?请提供我们可以用来调试您的问题的任何信息。除了“它不起作用”之外,你什么都没告诉我们。我们需要此外,如果您有问题,请先尝试下载一个文件,然后再开始将其与输出缓冲相结合!ftp_get返回true,PHP不返回任何警告或错误