0

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

4

3 回答 3

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)并防止在您实际下载之前将任何内容发送给用户。than 停止此ob_end_clean行为并再次允许直接输出。HTH。

于 2009-06-15T23:15:11.090 回答
1

我了解您正在尝试输出一些流以从 PHP 页面下载?

如果是这样,那么不要从包含 HTML 的页面输出该内容,而是重定向到单独的 php 页面,该页面仅输出下载流,必要时带有标题。

于 2009-06-15T23:12:03.483 回答
1

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

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

于 2009-06-15T23:17:28.150 回答