<?PHP
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
但是我已经阅读了帖子(http://heap.tumblr.com/post/119127049/a-note-about-phps-output-buffer-and-readfile),表明对于大文件应该使用ob_end_clean而不是ob_clean.
我的问题是:使用ob_clean而不是ob_end_clean有什么用?如果ob_end_clean像ob_clean一样工作并避免出现问题,为什么不是所有文档都显示使用ob_end_clean呢?
解决方法:
ob_clean()刷新缓冲区,但使输出缓冲保持活动状态.这意味着你的readfile()输出也将被缓冲.
ob_end_clean()刷新缓冲区,并完全TURNS OFF缓冲,允许readfile()直接转储到浏览器.