使用php强制下载文件

时间:2009-06-15 23:05:25

标签: php download content-disposition

我知道如何进行下载,当下载发生时,它会从导致下载的网页中附加html。如何过滤HTML?

3 个答案:

答案 0 :(得分:4)

如果我理解正确,这是一个常见的问题。我在index.php(start / root / entry文件)的开头使用ob_start解决了这个问题,然后输出了任何输出,下载后我执行了以下操作:

  ob_end_clean();
  header("Content-Type: application/octet-stream; "); 
  header("Content-Transfer-Encoding: binary"); 
  header("Content-Length: ". filesize("thefileinquestion").";"); 
  header("Content-disposition: attachment; filename=thefileinquestion");
  $fp = fopen(thefileinquestion, "r"); 
  while(!feof($fp)){
    $buffer = fread($fp, 1024); 
    echo $buffer;
    flush(); 
  } 
  fclose($fp);
  die();

<强>更新

ob_start命令缓冲任何输出(例如,通过echo,printf),并防止在实际下载之前发送给用户的任何内容。 ob_end_clean比停止此行为并允许再次直接输出。 HTH。

答案 1 :(得分:1)

据我所知,您正在尝试从PHP页面输出一些流以供下载?

如果是这样,那么不要从包含HTML的页面输出该内容,而是重定向到仅输出下载流的单独的php页面,如果需要,还可以使用标题。

答案 2 :(得分:1)

确保在文件流完成后您没有输出其他数据。在文件流完成后,使用exit()调用结束页面执行。关闭'?&gt;'后的任何字符标记(例如换行符)也可能导致下载问题。

将下载脚本移动到自己的文件应该可以更容易地发现任何问题,因为它只做一件事。为避免输出任何最终换行符,您可以省略结束'?&gt;'在这种情况下也标记在脚本的末尾。