PHP强制下载远程文件而不读入内存

时间:2012-02-11 04:29:49

标签: php http-headers buffer remote-access readfile

是否可以在PHP中强制下载远程文件而不将其读入内存?我知道fpassthru(),readfile(),file_get_contents()都会在将文件输出到浏览器之前将文件读入内存。

这是我的代码:

if($url = getRemoteFileURL($file_id))
{
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename="abc.zip"');
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
  header('Pragma: no-cache');

  readfile($url);  // is there a better function ?
}

我不想做标题(“位置:”),因为这会显示网址

1 个答案:

答案 0 :(得分:3)

如果您对下载的文件执行了header("Location: ...");,那么该网址实际上并没有显示出来(如果有的话)。

无论如何,readfile可能是你最好的选择。我认为,鉴于它直接写入输出,PHP继续读取文件的一部分,然后输出它,然后读取下一部分等,整体使用非常少的内存。