0

我正在创建一个下载脚本,允许用户下载可能位于本地服务器或远程服务器上的文件。在这两种情况下,我都不希望用户找出原始文件的位置。

如果我的文件在我的服务器上,这很容易:

$data = file_get_contents('/local/path');
$name = 'myphoto';
force_download($name, $data); //codeigniter

但是,对于远程文件,如果我这样做:

$data = file_get_contents('/remote/path');
$name = 'myphoto';
force_download($name, $data);

它将首先下载到我的服务器,这将延迟用户的下载。

有没有办法可以通过我的服务器以某种方式将任何文件流式传输给用户?所以它立即开始下载?可能的?

4

1 回答 1

4

看看fpassthru:它会比你拥有的多一点,但它应该做你想做的事。

你会想要这样的东西:

    $fp = fopen('/remote/path');

    // you can't use force_download($name, $data): you'll need to set the headers 
appropriately by hand: see the code for the download_helper, but you'll need to set the mime type and content-length if you really care.

    header('Content-Type: "'.$mime.'"');
                        header('Content-Disposition: attachment;filename="myphoto"');
                        header("Content-Transfer-Encoding: binary");
                        header('Expires: 0');
                        header('Pragma: no-cache');
                        header("Content-Length: ".strlen($data));
    fpassthru($fp);
于 2012-09-01T13:26:24.623 回答