0

我正在从另一台服务器下载文件。我希望将此文件推送给我的用户,而不是将其保存到我的服务器。

换句话说,将文件句柄传递给他们,这样它就可以通过我的服务器并保存到他们的机器上。我怎样才能做到这一点?到目前为止我有这个:

$handle = fopen($_GET['fileURL'], 'r');
$filename = stream_get_contents($handle);

我如何将它推送给用户,也许使用标题?

感谢您的任何帮助和指导。

编辑

我有标题:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");

只是它不会推动标题。我只是在大约 15 秒后得到一个空白页面,看起来像是在下载文件但没有给我。

我希望脚本立即将标头作为流发送给用户。出口();

4

2 回答 2

4

你可以试试这个

$filetype = mime_content_type($filename);
header('Content-type: '.$filetype);
header('Content-Disposition: attachment; filename="'.$filename.'"');

更新您的编辑:

您是否禁用了错误,因为这听起来像是标头已发送错误?

error_reporting(E_ALL | E_STRICT);
于 2009-02-12T00:48:25.663 回答
0

使用 readfile() 时不必使用 fopen();

只需在 readfile() 中包含文件名,如下所示:

readfile($_GET['fileUrl']);

尽管这在安全方面非常危险,因为用户可以指定文件服务器上的任何文件。如果您只有几个文件希望有人能够下载,也许您应该将它们存储在一个数组(或数据库,最好)中

这是一个数组示例:

$files = array('file1.jpg', 'file2.png', 'file3.pdf');
//assume $_GET['file_id'] == 0, 1 or 2

if (file_exists($files[$_GET['file_id']]))
    readfile($files[$_GET['file_id']]);
于 2009-02-12T01:04:33.253 回答