我正在创建一个下载脚本,允许用户下载本地或远程服务器上可能存在的文件。在这两种情况下,我不希望用户找到原始文件位置。
如果我的文件在我的服务器上,那很简单:
$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);
它将首先下载到我的服务器,这将延迟用户的下载。
有没有办法可以通过我的服务器以某种方式将任何文件流式传输给用户?所以它立即开始下载?可能的?
答案 0 :(得分: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);