【发布时间】:2010-11-03 04:32:01
【问题描述】:
我知道如何进行下载,当下载发生时,它会从导致下载的网页附加 html。如何过滤掉 HTML?
【问题讨论】:
-
您能否澄清一下,最好是一些示例代码?不清楚您所说的“导致下载”是什么意思
标签: php download content-disposition
我知道如何进行下载,当下载发生时,它会从导致下载的网页附加 html。如何过滤掉 HTML?
【问题讨论】:
标签: php download content-disposition
如果我理解正确,这是一个常见问题。在任何输出发生之前,我在 index.php(开始/根/条目文件)的开头使用 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。
【讨论】:
我了解到您正在尝试从 PHP 页面输出一些流以供下载?
如果是这样,则不要从包含 HTML 的页面输出该内容,而是重定向到单独的 php 页面,该页面仅输出下载流,必要时带有标题。
【讨论】:
确保文件流完成后没有输出其他数据。在文件流完成后,使用对 exit() 的调用来结束页面执行。结束 '?>' 标记之后的任何字符(例如换行符)也可能导致下载问题。
将下载脚本移动到自己的文件中应该更容易发现任何问题,因为它只做一件事。为避免输出任何最后的换行符,在这种情况下,您也可以在脚本末尾省略结束 '?>' 标记。
【讨论】: