Php 未能刷新缓冲区。没有要用ob_end_flush()方法刷新的缓冲区

Php 未能刷新缓冲区。没有要用ob_end_flush()方法刷新的缓冲区,php,hhvm,Php,Hhvm,我的网站正在播放mp3文件,我偶尔在日志文件中看到通知错误: Notice: failed to flush buffer. No buffer to flush in 代码如下: $filename = 'audio.mp3'; header("Content-Type: audio/mpeg"); header("Content-Length: ".filesize($filename)); header('Content-Disposition: inline; filename="'

我的网站正在播放mp3文件,我偶尔在日志文件中看到通知错误:

Notice: failed to flush buffer. No buffer to flush in
代码如下:

$filename = 'audio.mp3';
header("Content-Type: audio/mpeg");
header("Content-Length: ".filesize($filename));
header('Content-Disposition: inline; filename="' . $filename);
header("X-Pad: avoid browser bug");
header("Cache-Control: no-cache");
ob_clean();
flush();
set_time_limit(0);
$size = filesize($filename); 
$chunksize = 1 * (1024 * 1024);
if ($size > $chunksize) {
    $handle = fopen($filename, 'rb');
    $buffer = '';
    while (!feof($handle)) {
        $buffer = fread($handle, $chunksize);
        ob_start();
        echo $buffer;
        ob_end_flush();
        flush();
    }
    fclose($handle);
} else {
    readfile($filename);
}
错误总是指ob_end_flush()行。

因此,请查看,其中“
未能刷新缓冲区。没有要刷新的缓冲区”错误正在生成,如果没有活动的输出缓冲区,则似乎会生成错误

基于PHP源代码,
ob\u end\u flush()
不应该导致该错误-它不能,它不在代码中。你确定你的代码中没有一个
ob\u flush()
,而你在问题中与我们分享的内容中没有包含该代码吗

无论如何,您没有检查
ob\u start()
的返回值-它可能会失败,如果它无法创建新的输出缓冲区,那么后续的
ob\u flush()
ob\u end\u flush()
将失败,因为这些命令需要活动的输出缓冲区才能运行,如果没有,它们将发出错误


您可以在中看到,当没有活动输出缓冲区时,它发出的错误是“
删除和刷新缓冲区失败。没有要删除或刷新的缓冲区”

如果不确定您是否读取了任何内容,则ob_get_length()。是的,我确定。这是流媒体的唯一代码。其他代码(数千行)只是mp3文件。关于ob_start()的返回值,您可能是对的,但我自己无法重现这个错误。可能是因为多个用户访问,其中一个会间歇性地失败。无论如何,谢谢你。