我下载从另一台服务器中的文件。我想这个文件推到我的用户,而不是将其保存到我的服务器。

在换句话说,通过他们的文件句柄所以它只是通过我的服务器,并保存到他们的机器。我怎样才能做到这一点?我有这到目前为止:

$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秒,这看起来像它下载文件,但不能把它给我了。

我希望的脚本立即发送报头给用户作为一个流。     出口();

有帮助吗?

解决方案

您可以试试这个

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

更新您的编辑:

你有残疾的错误,因为这听起来像是已经发出错误的标题?

error_reporting(E_ALL | E_STRICT);

其他提示

您不必使用fopen()中的ReadFile()时;

只需包括内部的ReadFile()这样的文件名:

readfile($_GET['fileUrl']);

虽然这是非常危险的安全,明智的用户可以指定你的文件服务器上的任何文件。如果你只有你希望有人可以或许下载一些文件,你应该将它们存储在一个阵列(或数据库,preferebly)

下面是一个数组示例:

$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']]);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top