php – 从ob_clean更改为ob_end_clean?

readfile的PHP文档有一个如何下载文件的示例:

<?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;
}
?> 

这使用ob_clean来删除可能在输出缓冲区中的内容.

但是我已经阅读了帖子(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()直接转储到浏览器.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...